Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да намерите редове, които са дубликати по ключ, но не и дубликати във всички колони?

Можете да го направите, като съедините таблицата сама по себе си, като кажете, че всички D са равни и поне едно от C не е равно.

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;

Дава следните резултати:

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

Също така имайте предвид, че това е съвместимо с MS SQL 2000, както посочихте по-късно, че се изисква в Как да конвертирате SQL заявка, използваща общи таблични изрази, в One Without (за 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. Функция в SQL Server 2008, подобна на НАЙ-ГОЛЯМАТА в mysql?

  2. Как да изпълним съхранена процедура в заявка за избор

  3. Как да махна колона с ограничение?

  4. Изтрийте данни чрез функция с таблично значение в SQL Server

  5. Как мога да вляза в съхранена процедура на SQL Server от моя C# код?