2013-03-14 56 views
1

例如,對於表如下SQL查詢來獲取其不是同一給定組

c1  c2  c3 
a  b  1 
a  b  2 
c  d  1 
c  d  1 
e  f  3 
e  f  3 
e  f  3 
x  y  5 

在這種情況下我想c1的組值,C2行,其中的 所有 至少一個c3不一樣。所以在這種情況下(a,b)(a,b)的一行是1,(a,b)的另一行是2.

也不能報告行(x,y)。

+0

如果(G,H,1),(G,H ,2)和(g,h,2)是你不想讓(g,h)返回的值嗎?如果**所有**'c3'值不同,只返回'c1'和'c2'? – Josien 2013-03-14 10:58:33

+0

我認爲你需要更具體地瞭解你的預期結果背後的邏輯。爲什麼不應該報告(x,y)?從我之前的評論(g,h)會發生什麼? – Josien 2013-03-14 11:15:21

回答

4
SELECT c1, c2 
FROM tableName 
GROUP BY c1, c2 
HAVING COUNT(DISTINCT c3) > 1 

輸出

╔════╦════╗ 
║ C1 ║ C2 ║ 
╠════╬════╣ 
║ a ║ b ║ 
╚════╩════╝ 

的你,但要獲得所有與它的所有列行

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT c1, c2 
      FROM tableName 
      GROUP BY c1, c2 
      HAVING COUNT(DISTINCT c3) > 1 
     ) b ON a.c1 = b.c1 AND 
       a.c2 = b.c2 

輸出

╔════╦════╦════╗ 
║ C1 ║ C2 ║ C3 ║ 
╠════╬════╬════╣ 
║ a ║ b ║ 1 ║ 
║ a ║ b ║ 2 ║ 
╚════╩════╩════╝ 
+0

如果將(g,h,1),(g,h,2)和(g,h,2)添加到值中,這些查詢也將返回(g,h)。我不知道這是提問者正在尋找... – Josien 2013-03-14 11:11:21

+0

@Josien完全是因爲C3是不同的。 – 2013-03-14 11:13:23

+0

嗯,是的,我對這個問題中'所有C3都不相同'的陳述有疑問。 '一些c3應該不同'和'所有c3應該不同'之間的區別。但我認爲我們需要更多的信息:-) – Josien 2013-03-14 11:17:39

1

使用EXISTS

SELECT c1, c2, c3 
FROM dbo.TableName t1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.TableName t2 
    WHERE t1.c1 = t2.c1 AND t1.c2 = t2.c2 
    AND t1.c3 <> t2.c3 
) 

Demo(如果你只想一個記錄,使用t1.c3 < t2.c3

1

編輯:基於單對不被包括在內:

如果你想獲得每對,C1,C2,爲此,C3的每一個值是不同的,下面會做:

SELECT 
    C1, 
    C2 
FROM 
    dbo.Table1 
GROUP BY 
    C1, 
    C2 
HAVING 
    COUNT(1) = COUNT(DISTINCT C3) 
AND COUNT(1) > 1