Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution

    Đề bài: [SQL Server] Tách bảng điểm thành dòng

    Bảng scores(student, toan, ly, hoa) lưu điểm ba môn của mỗi sinh viên theo dạng bảng ngang (mỗi môn một cột).

    Hãy chuyển vị (UNPIVOT) về dạng dài: mỗi dòng gồm student, subject (tên môn) và score (điểm tương ứng). Tên môn xuất ra đúng chuỗi 'toan', 'ly', 'hoa'. Bỏ qua những ô điểm NULL (sinh viên chưa có điểm môn đó). Sắp xếp theo student tăng dần, rồi theo score giảm dần, nếu vẫn bằng thì theo subject tăng dần.

    Yêu cầu: dùng toán tử UNPIVOT của SQL Server.

    Ví dụ: dòng (An, 8, 9, NULL) tách thành An ly 9 và An toan 8 (môn hoa NULL bị bỏ).

    • Định dạng đầu vào:

      Bảng scores đã được tạo sẵn. Cột: student NVARCHAR, toan INT NULL, ly INT NULL, hoa INT NULL.

    • Ràng buộc đầu vào:

      Số sinh viên ≤30\le 30≤30, 0≤score≤1000 \le score \le 1000≤score≤100.

    • Định dạng đầu ra:

      Mỗi cặp (sinh viên, môn có điểm) một dòng gồm 3 cột (cách nhau bởi TAB): student, subject, score; thứ tự: student tăng, score giảm, subject tăng.

    Ví dụ:

    Đầu vào:

    CREATE TABLE scores(student NVARCHAR(50), toan INT, ly INT, hoa INT);
    INSERT INTO scores(student,toan,ly,hoa) VALUES (N'An',8,9,NULL),(N'Binh',7,7,5);

    Đầu ra:

    An	ly	9
    An	toan	8
    Binh	ly	7
    Binh	toan	7
    Binh	hoa	5

    Giải thích:

    An: ly=9, toan=8 (hoa NULL bo). Binh: toan=7, ly=7 (cung 7 -> theo subject), hoa=5.

    Chủ đề

    🗄️ Cơ sở dữ liệuSQL ServerSQL Server: PIVOTTất cả môn học

    Đang tải editor...