2016-05-08 8 views
0

私は4列と7行のテーブルを持っています。テーブルを構成する一意の行のみを返します

this is my table sample

このテーブルには、同じID同じLNAMEFNAMEで1人の顧客が含まれています。

また、同じIDの顧客がLNAMEまたはFNAMEの異なる2つの顧客を持っています。

これは営業担当者の入力エラーです。理想的には私のテーブルには、わずか2行(ID_pk 3と行と7)

を持っている[![UNIQUE顧客] [3] [3]

enter image description here

は、私は次のことを持っている必要がありますする必要がありresult-上記の表からセット:

  1. すべて一意の行のすべての4つの列(ID_pk 3,7行)によって。 (ID_pk 3,8と行)を4つのすべての列によって

  2. すべてを複製下に記載されている場合#3を除きます)。 CUSTOMER_IDではなく(ID_pk 1、2、4と行と5)LNAME及び/又はFNAMEに一致ないと

  3. すべての重複(これらの行は、検証のために営業担当者に返送しなければならない。

答えて

3

このようなことは、ネストされたクエリ、GROUP BY句、およびCOUNT関数に大きく依存します。

パート1 - ユニークな行

このクエリは、あなたの顧客IDがデータに一致しているすべての行を表示します。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers WHERE Customer_ID IN (
    SELECT Customer_ID FROM (
     SELECT DISTINCT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers 
     GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME 
    ) Customers 
    GROUP BY Customer_ID 
    HAVING COUNT(Customer_ID) = 1 
) 
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME 

パート2 - 重複

は、このクエリを使用すると、同じデータを複数回入力したすべての行を表示します。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME 
FROM dbo.customers 
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME 
HAVING COUNT(Customer_ID) > 1 

パート3 - データの不一致

このクエリは、ちょうど別のCOUNT値を探して、基本的に第1と同じです。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers WHERE Customer_ID IN (
    SELECT Customer_ID FROM (
     SELECT DISTINCT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers 
     GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME 
    ) Customers 
    GROUP BY Customer_ID 
    HAVING COUNT(Customer_ID) > 1 
) 
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME 
+0

ありがとう、フィリップ。 Count、Group By、IN、Not Exists、ネストされたサブクエリを使用していましたが、シーケンスはトラック外でした! – enigma6205

1

あなたはCTE(共通テーブル式)を使用することがあります。https://msdn.microsoft.com/en-us/library/ms175972.aspx

;WITH checkDup AS (
     SELECT Customer_ID, ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Customer ID) AS 'RN' 
     FROM Table) 
     SELECT Customer_ID FROM checkDup 
     WHERE RN = 1; 

はあなたの例の出力が得られます。

あなたが求める他の結果を得るためにCTEを操作することがあります。

関連する問題