1

例如如下表

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)。

4

3 回答 3

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 ║
╚════╩════╩════╝
于 2013-03-14T10:53:53.693 回答
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
)

演示(如果您只想要一条记录,请使用t1.c3 < t2.c3

于 2013-03-14T10:54:46.037 回答
1

编辑:基于不包括的单对:

如果你想得到每一对,C1,C2,C3 的每个值都不同,下面会做:

SELECT
    C1,
    C2
FROM
    dbo.Table1
GROUP BY
    C1,
    C2
HAVING
    COUNT(1) = COUNT(DISTINCT C3)
AND COUNT(1) > 1
于 2013-03-14T11:00:21.947 回答