Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan SQL untuk memilih grup yang berisi semua kumpulan nilai

Jika tabel OrderDetails berisi batasan unik pada OrderId dan ProductId, maka Anda dapat melakukan sesuatu seperti ini:

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
                )

Jika dimungkinkan untuk memiliki ProductId yang sama pada Pesanan yang sama beberapa kali, maka Anda dapat mengubah klausa Memiliki menjadi Count(Distinct ProductId) = 3

Sekarang, mengingat hal di atas, jika Anda menginginkan situasi di mana setiap pesanan memiliki tanda tangan yang sama dengan entri produk duplikat, itu lebih sulit. Untuk melakukan itu, Anda memerlukan tanda tangan pesanan yang dipermasalahkan atas produk yang dipermasalahkan dan kemudian meminta tanda tangan itu:

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. SQL - Pivot table dan group dengan tidak bekerja

  2. cara melewati baris yang buruk di sumber file datar ssis

  3. Database Sistem SQL Server – Pemeliharaan Tempdb

  4. SELECT DISTINCT mengabaikan kasus yang berbeda

  5. Menggunakan penerapan silang dalam pernyataan pembaruan