Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql中具有子值的交叉表_Sql_Postgresql_Crosstab - Fatal编程技术网

postgresql中具有子值的交叉表

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

我有一张名为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
等。您只需要在
交叉表
子查询中使用联接即可。