我有一张如下表格,
ClassId ClassStDate Gender Rate1 Rate2 Rate3 Rate4
1 2014-08-01 M 30 40 50 60
1 2014-08-01 F 26 36 46 56
我希望我的查询输出如下(多列而不是多行)
classid ClassStDate Rate1_M Rate1_F Rate2_M Rate2_F Rate3_M Rate3_F Rate4_M Rate4_F
1 2014-08-01 30 26 40 36 50 46 60 56
我可以通过多个CTE中的多个枢轴实现所需的结果并将它们连接在一起。 http://sqlfiddle.com/#!3/efef0/2
无论如何只用一个支点实现这个目标吗?
答案 0 :(得分:2)
WITH t AS (
SELECT
ClassId,
ClassStDate,
RateNum+'_'+Gender AS RateNumGender,
Rate
FROM classes
UNPIVOT(Rate FOR RateNum IN (Rate1,Rate2,Rate3,Rate4)) p
)
SELECT *
FROM t
PIVOT(SUM(Rate) FOR RateNumGender IN (Rate1_M,Rate1_F,Rate2_M,Rate2_F,Rate3_M,Rate3_F,Rate4_M,Rate4_F) )p
答案 1 :(得分:1)
没有什么可以阻止你做旧学校MAX / CASE
SELECT
classid ,
ClassStDate,
MAX(case Gender when 'M' THEN Rate1 ELSE NULL END) Rate1_M ,
MAX(case Gender when 'F' THEN Rate1 ELSE NULL END) Rate1_F ,
MAX(case Gender when 'M' THEN Rate2 ELSE NULL END) Rate2_M ,
MAX(case Gender when 'F' THEN Rate2 ELSE NULL END) Rate2_F ,
MAX(case Gender when 'M' THEN Rate3 ELSE NULL END) Rate3_M ,
MAX(case Gender when 'F' THEN Rate3 ELSE NULL END) Rate3_F ,
MAX(case Gender when 'M' THEN Rate4 ELSE NULL END) Rate4_M ,
MAX(case Gender when 'F' THEN Rate4 ELSE NULL END) Rate4_F
FROM
classes
GROUP BY
classid ,
ClassStDate