postgresql中具有子值的交叉表
我有一张名为tblCat的桌子:postgresql中具有子值的交叉表,sql,postgresql,crosstab,Sql,Postgresql,Crosstab,我有一张名为tblCat的桌子: ID Desc 1 Category A 2 Category B 3 Category C 第二个表是tblItem ID Desc Cat_Id 1 Item 1 1 2 Item 2 1 3 Item 3 2 4 Item 4 2 5 Item 5 3 6 Item 6 3 *Cat_id是tblCat
ID Desc
1 Category A
2 Category B
3 Category C
第二个表是tblItem
ID Desc Cat_Id
1 Item 1 1
2 Item 2 1
3 Item 3 2
4 Item 4 2
5 Item 5 3
6 Item 6 3
*Cat_id是tblCat的连接键*
第三个是tblItemDetail
ID Loc Item_Id ItemValue ValueDesc
1 S1 Item 1 Color Black
2 S1 Item 1 Brand ABC
3 S1 Item 1 Status Ready
4 S1 Item 1 Discontinue False
5 S1 Item 2 Color White
6 S1 Item 2 Brand XYZ
7 S1 Item 2 Status Ready
8 S1 Item 2 Discontinue False
9 S2 Item 3 Color White
10 S2 Item 3 Brand ABC
11 S2 Item 3 Status Out-of-stock
12 S2 Item 3 Discontinue True
我可以使用以下SQL为1个单列值构建交叉表:
select tbl.Loc, tbl.ItemValue, tbl.Item1, tbl.Item2, tbl.Item3,
tbl.Item4, tbl.Item5, tbl.Item6
from crosstab(
'select Loc, Item_Id, ItemValue, ValueDesc
from tblItemDetail',
'select Item_Id
from tblItemDetail
group by Item_Id'
) tbl(Loc text, ItemValue text, Item1 text, Item2 text, Item3 text, Item4 text,
Item5 text, Item6 text,);
结果将是:
Loc ItemValue Item 1 Item 2 Item 3 Item 4 Item 5 Item 6
S1 Color Black White
S1 Brand ABC XYZ
S1 Status Ready Ready
S1 Discontinue False False
S2 Color White
S2 Brand ABC
S2 Status Out-of-Stock
S2 Discontinue True
但是如何创建一个交叉表查询来显示这个结果呢
Cat A Cat B Cat C
Loc ItemValue Item 1 Item 2 Item 3 Item 4 Item 5 Item 6
S1 Color Black White
S1 Brand ABC XYZ
S1 Status Ready Ready
S1 Discontinue False False
S2 Color White
S2 Brand ABC
S2 Status Out-of-Stock
S2 Discontinue True
简言之,我想知道如何构建一个具有两列级别的交叉表。询问代码的问题必须证明对所解决问题的最低理解。包括尝试的解决方案,为什么它们不起作用。我已经使用tablefunc创建了一个交叉表,并且已经能够显示一个级别的列,即上面示例中的项目N。但我不知道如何在上面创建更高的列级别。向我们展示您的尝试。@FreshPrinceOfSO已经更新了我的问题。谢谢提醒。:)PostgreSQL真的可以返回一些列组合成什么列组/子集的结果集吗?我想那应该是申请者的工作。但是,我认为应该可以在
类别A项目1
、类别A项目2
、类别B项目3
等名称下返回列类别A项目1
、类别A项目2
、类别B项目3
等。您只需要在交叉表
子查询中使用联接即可。