PostgreSQL:将值放在一列作为结果集中的标题?

时间:2016-09-21 11:22:30

标签: sql postgresql pivot crosstab

我们说我有两张桌子,一张有学校,另一张有课。两个表都有SchoolID,因此可以匹配。他们看起来像这样:

TableSchools

SchoolID SchoolName
1        SchoolOne
2        SchoolTwo
3        SchoolThree

TableClasses

ClassID SchoolID ClassName
1       1        ClassOne
2       1        ClassTwo
3       2        ClassThree
4       2        ClassFour
5       2        ClassFive
6       3        ClassSix
7       3        ClassSeven

我希望我的结果集像这样

SchoolOne   SchoolTwo   SchoolThree
ClassOne    ClassThree  ClassSix
ClassTwo    ClassFour   ClassSeven
NULL        ClassFive   NULL

我已经在TSQL中聆听过我可以使用group by with rollup,但似乎不可能,或者至少我不明白如何使用它from here。< / p>

1 个答案:

答案 0 :(得分:1)

不完全是一个支点,但应该在代码中允许相同的程序结果:

select ts.schoolName 
, array_agg(tc.className order by tc.className) vals
from tableSchools ts
join tableClasses tc tc.schoolID=ts.schoolID
group by ts,schoolName

注意:根据您的客户端,返回JSON而不是数组可能更容易..如果您需要有关该部分的帮助,请告诉我,我会更新。