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

Làm thế nào để Tìm các Hàng trùng lặp bởi một khóa nhưng không trùng lặp trong tất cả các cột?

Bạn có thể làm điều đó bằng cách tham gia vào bảng, nói rằng tất cả các chữ D đều bằng nhau và ít nhất một trong các chữ C không bằng nhau.

CREATE TABLE #Source (
    D1 VARCHAR(2),
    D2 VARCHAR(2),
    D3 VARCHAR(2),
    C4 VARCHAR(2),
    C5 VARCHAR(2),
    C6 VARCHAR(2) );

INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X3');
INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X4');
INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3');
INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3');

SELECT S1.D1, S1.D2, S1.D3, S1.C4 C4_1, S2.C4 C4_2, S1.C5 C5_1, S2.C5 C5_2, S1.C6 C6_1, S2.C6 C6_2
FROM
    #Source S1
            INNER JOIN
    #Source S2
            ON
        (       S1.D1 = S2.D1 
            AND S1.D2 = S2.D2
            AND S1.D3 = S2.D3
            AND (   S1.C4 <> S2.C4
                 OR S1.C5 <> S2.C5
                 OR S1.C6 <> S2.C6
                 )
        );

DROP TABLE #Source;

Cho kết quả sau:

D1   D2   D3   C4_1 C4_2 C5_1 C5_2 C6_1 C6_2
---- ---- ---- ---- ---- ---- ---- ---- ----
A    B    C    X1   X1   X2   X2   X4   X3
A    B    C    X1   X1   X2   X2   X3   X4

Cũng lưu ý rằng điều này tương thích với MS SQL 2000 như bạn đã chỉ ra sau đó là bắt buộc trong Cách chuyển đổi truy vấn SQL bằng cách sử dụng biểu thức bảng phổ biến thành biểu thức không có (đối với SQL Server 2000) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các hàm vô hướng ODBC cho Ngày và Giờ trong SQL Server (Ví dụ T-SQL)

  2. Cơ sở dữ liệu kéo dài trong SQL Server 2016 RTM

  3. Làm thế nào một truy vấn SQL có thể có hai mệnh đề?

  4. Cách nhận giá trị hộp kiểm từ gridview khi hộp kiểm OnCheckedChanged

  5. SqlDependency Độ tin cậy?