用于透视列的SQL查询

时间:2016-05-22 11:50:49

标签: sql

我有一张桌子' tbl_marks'像这样,

content

然后我需要在过滤术语1后显示以下结果

st_index    Subject     Term     Marks
----------------------------------------
13110       Maths       1        60
13110       Maths       2        70
13110       Maths       3        80
13110       Science     1        70
13110       Science     2        70
13110       Science     3        80
13111       Maths       1        90
13111       Maths       2        70
13111       Maths       3        80
13111       Science     1        80
13111       Science     2        70
13111       Science     3        80

对于我使用此代码的移动,没有预期的输出

st_index    Maths     Science    
--------------------------------
13110       60         70        
13111       90         80  

1 个答案:

答案 0 :(得分:1)

您非常接近,您只需要使用聚合函数包裹CASE EXPRESSION,例如MAX()/MIN()

SELECT st_index,
       MAX(case when subject='Maths' then marks end) as Maths,
       MAX(case when subject='Science' then marks end) as Science
FROM tbl_marks 
where term=1
group by st_index

顺便说一句 - 这称为条件聚合,与pivot相同,但它们是两个不同的东西。