2017-07-27 112 views
0

這是SQL Server的問題,所以這裏是我與工作表(注:列NAME是代碼集的名稱):如何刪除用於刪除SQL中重複項的內部查詢的重複項?

表:CODE SET

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

表:CODE SET DETAIL

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, BLUE, 2 
JACKETS, GREEN, 2 

我怎麼會纏繞在下面的查詢另一查詢,這樣我只得到JACKETS

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

+0

我結束了下面的查詢感謝@NetMage 用'SELECT DISTINCT NAME FROM(SELECT bcs.NAME,bcsd.CODE,COUNT(*)FROM B_CODE_SET_DETAIL作爲BCSD INNER JOIN B_CODE_SET爲BCS ON BCSD .CODE_SET_ID = bcs.CODE_SET_ID GROUP BY bcs.NAME,bcsd.CODE HAVING COUNT(*)> 1 )as subQuery' –

0

如果你真的想只有「夾克」的價值,你爲什麼不添加「bcs.name =‘外套’」你HAVING子句,並跳過整個外部查詢,還是我失去了一些東西?

+1

如果他還有PANTS和SHIRTS,該怎麼辦? – NetMage