2016-04-14 15 views

答えて

2

データベースが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方法を好みます。パフォーマンスは両方とも同じになります