【发布时间】:2018-12-14 10:45:30
【问题描述】:
表:
ID Subject
1 Math
1 Eng
2 Sci
2 Phy
2 bio
输出:
id Subject1 Subject2 Subject3
1 Math Eng
2 Sci Phy bio
所需的输出如上所示。
【问题讨论】:
标签: sql oracle oracle11g pivot
表:
ID Subject
1 Math
1 Eng
2 Sci
2 Phy
2 bio
输出:
id Subject1 Subject2 Subject3
1 Math Eng
2 Sci Phy bio
所需的输出如上所示。
【问题讨论】:
标签: sql oracle oracle11g pivot
我会使用 ROW_NUMBER 窗口函数和条件聚合函数
SELECT ID,
MAX(CASE WHEN rn = 1 THEN SUBJECT END) Subject1,
MAX(CASE WHEN rn = 2 THEN SUBJECT END) Subject2,
MAX(CASE WHEN rn = 3 THEN SUBJECT END) Subject3
FROM(
SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ROWNUM) rn
FROM T t1
) t1
GROUP BY ID
【讨论】:
NOC ATH GYM CYC BOX SAI
胸罩 1 3 0 1 2
中国 6 2 2 4 1
书房 1 0 2 0 3
ESP 2 0 0 0 0
ETH 8 0 0 0 0
GRE 1 1 0 0 2
从 olympic_country_sport_medals 中选择 * 不转( (奖牌)在(ath,box,gym,sai,cyc)的运动 ) 枢轴 ( 总和(奖牌)在( 'BRA' 胸罩,'CHN' CHN,'DEN' DEN,'ESP' ESP,'ETH' ETH,'GRE' GRE ) );
输出:
SPORT BRA CHN DEN ESP ETH GRE
田径 1 6 1 2 8 1
艺术馆 3 2 0 0 0 1
拳击 1 4 0 0 0 0
航行 2 1 3 0 0 2
赛道自行车 0 2 2 0 0 0
【讨论】: