2014-09-29 43 views
0

我在SQL Server中下面的语句,我现在用pivot枢转相当于在PostgreSQL中

Select YR, [1] As Beginning, [2] As Inter, [3] As Advanced, [4] As AdvHigh,Campus 
From  
    (Select YR, Rating, StudentId, Campus 
     from mytable 
     Where YR = '2014' 
    ) As Data 
    PIVOT (Count(StudentId) 
      For Rating IN ([1], [2], [3], [4]) 
    ) As Pvt 

现在我试图写在PostgreSQL相同的查询(我是新手到PostgreSQL)。我已经看过tablefunc但我不确定如何使用它。

任何帮助将是伟大的!

+0

你能提供一个SQLFiddle(http://sqlfiddle.com/ )与示例输入和示例输出? – Wolph 2014-09-29 15:30:35

回答

1

我不是太熟悉的PostgreSQL tablefunc但你可以通过使用一个聚合函数CASE表达复制PIVOT

Select YR, 
    sum(case when ListeningProfRating = 1 then 1 else 0 end) As Begining, 
    sum(case when ListeningProfRating = 2 then 1 else 0 end) As Inter, 
    sum(case when ListeningProfRating = 3 then 1 else 0 end) As Advanced, 
    sum(case when ListeningProfRating = 4 then 1 else 0 end) As AdvHigh 
    Campus 
from mytable 
Where YR = '2014' 
    AND ListeningScoreCode IN('S', 'B') 
group by yr, campus 
+0

嗨...感谢您的解决方案。它效果很好。有没有一种方法可以在这里使用交叉表进行数据交换? – Abhishek 2014-09-29 16:42:40

+0

@crozzfire是的,但我不熟悉该语法 - 请参阅此问题/答案 - http://stackoverflow.com/questions/3002499/postgresql-crosstab-query – Taryn 2014-09-29 17:22:30