列内に同じ値が複数回出現するレコードを表示したいのですが、対応する列が元の列に対して異なる値を持っている場合に限ります。
例えば:
Name ID
NORTH 5762
NORTH 5762
EAST 7457
WEST 1234
WEST 1234
WEST 5678
EAST は 1 回だけ出現し、NORTH は複数回出現しますが、すべて同じ ID 値を共有するため、WEST のみを表示する必要があります。
列内に同じ値が複数回出現するレコードを表示したいのですが、対応する列が元の列に対して異なる値を持っている場合に限ります。
例えば:
Name ID
NORTH 5762
NORTH 5762
EAST 7457
WEST 1234
WEST 1234
WEST 5678
EAST は 1 回だけ出現し、NORTH は複数回出現しますが、すべて同じ ID 値を共有するため、WEST のみを表示する必要があります。
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 ║
╚══════╝
したがって、名前と 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