例如,如下表所示
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,其中 all 至少有一个c3不相同。所以在这种情况下(a,b),因为(a,b)的一行是1而另一行的(a,b)是2。
也不得报告row(x,y)。
答案 0 :(得分: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 ║
╚════╩════╩════╝
答案 1 :(得分: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
)
答案 2 :(得分:1)
编辑:没有包含单对的广告:
如果你想得到每一对C1,C2,其中每个C3的值都不同,以下将会这样做:
SELECT
C1,
C2
FROM
dbo.Table1
GROUP BY
C1,
C2
HAVING
COUNT(1) = COUNT(DISTINCT C3)
AND COUNT(1) > 1