例如,對於表如下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)。
例如,對於表如下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)。
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 ║
╚════╩════╩════╝
使用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
)
編輯:基於單對不被包括在內:
如果你想獲得每對,C1,C2,爲此,C3的每一個值是不同的,下面會做:
SELECT
C1,
C2
FROM
dbo.Table1
GROUP BY
C1,
C2
HAVING
COUNT(1) = COUNT(DISTINCT C3)
AND COUNT(1) > 1
如果(G,H,1),(G,H ,2)和(g,h,2)是你不想讓(g,h)返回的值嗎?如果**所有**'c3'值不同,只返回'c1'和'c2'? – Josien 2013-03-14 10:58:33
我認爲你需要更具體地瞭解你的預期結果背後的邏輯。爲什麼不應該報告(x,y)?從我之前的評論(g,h)會發生什麼? – Josien 2013-03-14 11:15:21