2016-11-14 92 views
0

我已經搜索了很多關於它的信息,但是找不到有關我的問題的任何相關信息。我有這樣的數據集。從SQL中的同一個表ID中選擇不同的值列表

Column1 Column2 
    A   B  
    A   B 
    A   C 
    X   B 
    X   B 
    Y   C 
    Y   B 
    T   A 
    T   A 
    T   A 

我可以不同的Column1與出現的總數。但我實際上想要刪除常量行。當我運行查詢時,結果應該是這樣的;

Column1 Column2 
    A   B  
    A   B 
    A   C 
    Y   C 
    Y   B 

正如我們上面所看到的,A和Y在Column2中有不同的值。我如何查詢?我使用Sql Server 2014

+0

所以你要刪除第1列中的值只有第2列中有一個值的行?如果他們有多個第2列的可能性,你想離開他們? – Fritz

+0

是的。這正是我想要查詢的內容。 –

回答

1

你要算配對的出現次數,你做任何事情

SELECT ColumnA, ColumnB, count(*) 
FROM [source] 
GROUP BY ColumnA, ColumnB 

這會給你的每個配對的列表,以及它發生之前。接下來,你要算在ColumnA每個值多少配對了,並剪下的人只有一個選擇:

SELECT ColumnA, count(*) 
FROM 
    (
    SELECT ColumnA, ColumnB, count(*) 
    FROM [source] 
    GROUP BY ColumnA, ColumnB 
    ) 
GROUP BY ColumnA 
HAVING count(*) > 1 

這將會給你,你要找的ColumnA值的列表。從那裏,你想尋找ColumnA的這些值在原始數據與WHERE .. IN聲明:

SELECT ColumnA, ColumnB 
FROM [source] 
WHERE ColumnA IN 
    (
    SELECT ColumnA, count(*) 
    FROM 
     (
     SELECT ColumnA, ColumnB, count(*) 
     FROM [source] 
     GROUP BY ColumnA, ColumnB 
     ) 
    GROUP BY ColumnA 
    HAVING count(*) > 1 
    ) 
+0

謝謝Fritz。有了一些配置sql服務器,我可以做到這一點。 –

1

COUNT(DISTINCT ...)可能有CTE工作:

; WITH CTE AS (
    SELECT Column1 
    FROM [my_table] 
    GROUP BY Column1 
    HAVING COUNT(DISTINCT Column2) > 1 
) 
SELECT t.* 
FROM [my_table] t 
JOIN CTE ON CTE.Column1 = t.Column1; 
+0

謝謝約翰。你的解決方案也有效。 –

相關問題