2017-07-27 25 views
0

これはので、ここで私が働いているテーブルは、SQL Serverの問題である(注:列NAMEはコードセットの名前です):SQLで重複を削除するために使用された内部クエリの重複を削除するにはどうすればよいですか?

表:コードセット

CODE_SET_ID | NAME 
-------------+----------- 
1   | JACKETS 
2   | PANTS 
3   | SHIRTS 

表:CODE SET詳細

CODE   | DESCRIPTION | CODE_SET_ID 
---------------+----------------+------------ 
BLUE   | BLUE JACKET | 1 
BLUE   | BLUE JACKET | 1 
GREEN   | GREEN JACKET | 1 
GREEN   | GREEN JACKET | 1 
PURPLE   | PURPLE JACKET | 1 

私は現在書いたクエリがすべての重複コードはコードを設定し、どのコードセット見つかりますこれらのコードセットコードも属しています。次のクエリは、私が唯一JACKETSを得るように

JACKETS, BLUE, 2 
JACKETS, GREEN, 2 

がどのように私は次のクエリの周りに別のクエリを包むでしょう返すでしょうか?

SELECT 
    bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*) 
FROM 
    CODE_SET_DETAIL as bcsd 
INNER JOIN 
    CODE_SET as bcs ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID 
GROUP BY 
    bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION 
HAVING 
    COUNT(*) > 1 

はこれまでのところ、私はWHERE EXISTSを使用してみましたが、まだ結果セットが正しく表示されません。

+0

テーブルのサンプルが列名のSQLと一致しない、または出力がクエリと一致するのはなぜですか? – NetMage

+0

'GROUP BY'の前に' WHERE bcs.NAME = 'JACKET'を入れてください。 – Eric

答えて

1
WITH X (Name, Code, Description, DetailCount) AS (
    SELECT bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*) 
    FROM CODE_SET_DETAIL as bcsd 
    INNER JOIN CODE_SET as bcs 
    ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID 
    GROUP BY bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION 
    HAVING COUNT(*) > 1 
) 
SELECT DISTINCT Name 
FROM X 
+0

このクエリを機能させるために、 'COUNT(*)'カラムのエイリアスを指定しなければなりませんでした。サブクエリ結果セットのエイリアスを追加する必要がありました。 –

+0

元のクエリを変更せずにMS SQL要件を処理するクエリを更新しました。私は@NetMage に次のクエリのおかげで終わった – NetMage

+0

'INNERはBCSD ON BCS としてB_CODE_SETを登録しようBCSD としてB_CODE_SET_DETAILからのカウント として( SELECT bcs.NAME、bcsd.CODE、COUNT(*)FROM DISTINCT NAME を選択.CODE_SET_ID = bcs.CODE_SET_ID GROUP BY bcs.NAME、bcsd.CODE HAVING COUNT(*)> 1 )as subQuery' –

0

あなたが本当にあなたのHAVING句に「bcs.name = 『ジャケット』」を追加し、全体の外側のクエリをスキップしない理由だけで「ジャケット」の値を、したい、または私は何かが足りないのですか?場合

+1

PANTSとSHIRTSも持っていたらどうなりますか? – NetMage

関連する問題