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

このシナリオでは、少なくとも 1 つの c3 が同じではないc1 、c2 のグループ値が必要です。したがって、この場合 (a, b) は、(a, b) の 1 つの行が 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

編集:含まれていない単一のペアに基づいて:

C3のすべての値が異なる各ペアC1、C2を取得する場合は、次のようにします。

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 に答える
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
)

デモ(レコードが 1 つだけ必要な場合は、を使用t1.c3 < t2.c3)

于 2013-03-14T10:54:46.037 に答える