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

    solution

    Đề bài: [SQL Server] Hai đơn mới nhất của mỗi khách với CROSS APPLY

    Bảng donhang ghi đơn của khách. Với mỗi khách, cần lấy 2 đơn có giá trị lớn nhất (top 2 theo tien giảm dần) dùng CROSS APPLY.

    Cột Kiểu Ý nghĩa
    madon int Mã đơn
    makh nvarchar(20) Mã khách
    tien int Giá trị đơn

    Bảng phụ khach(makh) chứa danh sách khách cần xét. Dùng CROSS APPLY (SELECT TOP 2 ... ORDER BY tien DESC, madon ASC).

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

      SETUP SQL tạo bảng khach, donhang và chèn dữ liệu.

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

      Mỗi khách có thể có ít hơn hoặc nhiều hơn 2 đơn. CROSS APPLY bỏ khách không có đơn.

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

      Ba cột: makh, madon, tien. Sắp xếp theo makh tăng, tien giảm, madon tăng.

    Ví dụ:

    Đầu vào:

    CREATE TABLE khach (makh nvarchar(20));
    CREATE TABLE donhang (madon int, makh nvarchar(20), tien int);
    INSERT INTO khach VALUES (N'KH1'),(N'KH2');
    INSERT INTO donhang VALUES
    (1,N'KH1',100),(2,N'KH1',300),(3,N'KH1',200),(4,N'KH2',50);

    Đầu ra:

    KH1	2	300
    KH1	3	200
    KH2	4	50

    Giải thích:

    KH1 có 3 đơn, CROSS APPLY lấy top 2 theo tien giảm dần: 300, 200. KH2 chỉ 1 đơn nên lấy 50.

    Đang tải editor...