Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Câu lệnh SQL để chọn nhóm chứa tất cả các giá trị

Nếu bảng OrderDetails chứa một ràng buộc duy nhất đối với OrderId và ProductId, thì bạn có thể làm như sau:

Select ...
From Orders As O
Where Exists    (
                Select 1
                From OrderDetails As OD1
                Where OD1.ProductId In(1,2,3)
                    And OD1.OrderId = O.Id
                Group By OD1.OrderId
                Having Count(*) = 3
                )

Nếu có thể có cùng một ProductId trên cùng một Đơn đặt hàng nhiều lần, thì bạn có thể thay đổi mệnh đề Có thành Count(Distinct ProductId) = 3

Bây giờ, với những điều trên, nếu bạn muốn tình huống mỗi đơn hàng có chữ ký giống nhau với các mục nhập sản phẩm trùng lặp, điều đó khó hơn. Để làm điều đó, bạn sẽ cần chữ ký của đơn đặt hàng đối với các sản phẩm được đề cập và sau đó truy vấn chữ ký đó:

With OrderSignatures As
    (
    Select O1.Id
        ,   (
            Select '|' + Cast(OD1.ProductId As varchar(10))
            From OrderDetails As OD1
            Where OD1.OrderId = O1.Id
            Order By OD1.ProductId
            For Xml Path('')
            ) As Signature
    From Orders As O1
    )
Select ...
From OrderSignatures As O
    Join OrderSignatures As O2
        On O2.Signature = O.Signature
            And O2.Id <> O.Id
Where O.Id = 5


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Microsoft Access so với SQL Server

  2. Vòng lặp SQL Server - làm cách nào để tôi lặp qua một tập hợp các bản ghi

  3. Tìm các đối tượng bị hỏng trong SQL Server

  4. Chốt khóa từ Phạm vi khóa trên chỉ mục khóa chính

  5. sql chọn 3 cột và loại trừ trên hai cột