3

列内に同じ値が複数回出現するレコードを表示したいのですが、対応する列が元の列に対して異なる値を持っている場合に限ります。

例えば:

Name    ID
NORTH   5762
NORTH   5762
EAST    7457
WEST    1234
WEST    1234
WEST    5678

EAST は 1 回だけ出現し、NORTH は複数回出現しますが、すべて同じ ID 値を共有するため、WEST のみを表示する必要があります。

4

2 に答える 2

2
SELECT  a.*
FROM    tableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    TableName b
            WHERE   a.Name = b.name
            GROUP   BY NAME
            HAVING  COUNT(DISTINCT ID) > 1 AND
                    COUNT(*) > 1
        )

出力

╔══════╦══════╗
║ NAME ║  ID  ║
╠══════╬══════╣
║ WEST ║ 1234 ║
║ WEST ║ 1234 ║
║ WEST ║ 5678 ║
╚══════╩══════╝

または、すべてのレコードを表示したくない場合は、

SELECT  Name
FROM    TableName 
GROUP   BY NAME
HAVING  COUNT(DISTINCT ID) > 1 AND COUNT(*) > 1

出力

╔══════╗
║ NAME ║
╠══════╣
║ WEST ║
╚══════╝
于 2013-05-29T02:43:41.803 に答える
0

したがって、名前と ID でグループ化し、結果を 1 つだけにしたい場合は、次のようにします。

SELECT Name
FROM Table
WHERE Name IN
 (
    SELECT Name
    FROM Table
    GROUP BY Name, ID
    HAVING COUNT(*) = 1
 ) 
GROUP BY NAME
HAVING COUNT(NAME) > 1

これがフィドルです:http://www.sqlfiddle.com/#!3/d7d16/1

于 2013-05-29T02:45:02.587 に答える