0
入力:複数の列に沿って個数を区別するにはどうすればよいですか?
id sem1 sem2 sem3 sem4 sem5 sem6 sem7
1 S O S R null null null
2 O O R R S null null
所望の出力:
id O R S
1 1 1 2
2 2 2 1
入力:複数の列に沿って個数を区別するにはどうすればよいですか?
id sem1 sem2 sem3 sem4 sem5 sem6 sem7
1 S O S R null null null
2 O O R R S null null
所望の出力:
id O R S
1 1 1 2
2 2 2 1
データベースがAPPLY/UNPIVOT
オペレータは、この
CROSS APPLY
メソッドを使用してサポートしている場合
SELECT id,
SUM(CASE WHEN val = 'O' THEN 1 ELSE 0 END) O,
SUM(CASE WHEN val = 'R' THEN 1 ELSE 0 END) R,
SUM(CASE WHEN val = 'S' THEN 1 ELSE 0 END) S
FROM mytable
CROSS apply (VALUES (sem1),
(sem2),
(sem3),
(sem4),
(sem5),
(sem6),
(sem7)) cs(val)
GROUP BY id
UNPIVOT
方法
SELECT id,
SUM(CASE WHEN val = 'O' THEN 1 ELSE 0 END) O,
SUM(CASE WHEN val = 'R' THEN 1 ELSE 0 END) R,
SUM(CASE WHEN val = 'S' THEN 1 ELSE 0 END) S
FROM (SELECT *
FROM mytable) a
UNPIVOT (val
FOR col IN (sem1,
sem2,
sem3,
sem4,
sem5,
sem6,
sem7)) upv
GROUP BY id
それは、より読みやすいので、私は個人的にUNPIVOT
以上CROSS APPLY
方法を好みます。パフォーマンスは両方とも同じになります
あなたは使用することができます '条件の場合' –
あなたはどのDBMSを使用しています –