在postgresql中使用子值的交叉表

时间:2014-01-06 03:04:43

标签: 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。*

的连接键

第三个是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

简而言之,我想知道如何构建一个具有2列级别的交叉表。

0 个答案:

没有答案