ORACLE SQL Pivot问题

时间:2019-08-19 16:09:43

标签: sql oracle

我正在尝试透视sql结果。我需要在一个查询中完成所有这些操作。下面告诉我header_id的无效标识符。我正在使用Oracle数据库。

代码

Select * From (
select ppd.group_id,g.group_name, ct.type_desc,ht.hos_cat_descr
from item_history ih, item ci, contract ppd, 
header ch, group g, cd_std_type ct, cd_hos h, 
cd_std_hospital_cat ht
where ih.item_id = ci.item_id
and ih.header_id = ch.header_id
and ci.hos_id = h.hos_id
and ih.item_id = ci.item_id
and ch.user_no = ppd.user_no
and ppd.group_id = g.group_id
and ch.header_type = ct.header_type_id
and ci.hos_id = h.hos_id
and h.cat_id = ht.cat_id
)
Pivot
(
count(distinct header_id) as Volume
For hos_cat_descr IN ('A')
)

1 个答案:

答案 0 :(得分:1)

您的内部查询的投影中没有header_id,因此,pivot子句没有可用的该列。您需要将其添加为:

Select * From (
select ppd.group_id,g.group_name, ct.type_desc,ht.hos_cat_descr,ih.header_id
---------------------------------------------------------------^^^^^^^^^^^^^
from ...
)
Pivot
(
count(distinct header_id) as Volume
For hos_cat_descr IN ('A')
)

或:

Select * From (
select ppd.group_id,g.group_name, ct.type_desc,ht.hos_cat_descr,ch.header_id
---------------------------------------------------------------^^^^^^^^^^^^^
from ...
)
Pivot
(
count(distinct header_id) as Volume
For hos_cat_descr IN ('A')
)

这并不重要,因为这两个值必须相等,因为它们是连接条件的一部分。

您可以通过更简单的聚合(而不是枢轴)来实现相同的目的,但是想必您实际上在枢轴中要做的工作更多。