カラム値が重複していない場合にはその値を、そうでない場合にはnullを返すSQLを作成したい
内容としてはタイトルで全てですが、うまく表現できていないように思えるため下記に図を記載しました。
一応、実現することはできたのですが、もう少しシンプルに書けるかと思い質問させて頂きました。(case文などは使わず、外部結合を使用できそうな気がしていますが実現できませんでした。)
テーブル
| name | value |
|------|-------|
| a | a1 |
| b | b1 |
| c | c1 |
| c | c2 |
欲しい結果
| name | value |
|------|-------|
| a | a1 |
| b | b1 |
| c | null |
| c | null |
とりあえず作成したSQL
select
h.name
, case tmp.c
when 1 then h.value
else null
end as value
from
hoge as h
, (
select
name
, count(value) c
from
hoge
group by
name
) as tmp
where
h.name = tmp.name
order by
name;
再現するためのSQL
create table hoge(name varchar(10),value varchar(10));
insert into hoge values('a','a1'),('b','b1'),('c','c1'),('c','c2');
select * from hoge order by name;