我在Oracle中的数据透视表遇到问题。我有一个工作示例,可以获取某些库存项目的计数。有两种类型的计数,但我只占一种类型。我需要改变我的示例以合并两种类型的计数,并保持数据彼此“在线”(如果有意义的话)。我会尽力解释。考虑以下查询:带有数据透视表和聚合函数的Oracle SQL查询
select *
from (select state_code, city_code, equipment_type, sum(AVAILABLE_COUNT) as available_count
from EQUIP_VIEW_TABLE
group by state_code, city_code, equipment_type
)
pivot (max(available_count)
for (equipment_type) in
('Sandbag' "CNT_SANDBAG",
'Gabion Basket' "CNT_GABION_BASKET",
'Rapid Deployment Floodwall' "CNT_RAPID_DEPLOYMENT_FLOODWALL",
'Portable Coffer Dam' "CNT_PORTABLE_COFFER_DAM",
'Polyethylene Sheeting' "CNT_POLYETHYLENE_SHEETING",
'Pump' "CNT_PUMP"))
现在,此查询适用于一种类型的计数(“可用计数”)。该数据是所有对应于国家/城市在同一行,并没有数据被复制,即
STATE CITY SANDBAGS BASKETS FLOODWALL DAM SHEET PUMP
Texas Austin 12 45 11 16 89 8
我需要考虑不同类型的计数。我需要考虑某些设备上的“可用计数长度”。我试着用下面的查询来实现:
SELECT *
FROM (SELECT unique state_code, city_code,
equipment_type AS equipment_type_cnt, equipment_type as equipment_type_len,
sum(AVAILABLE_COUNT) AS available_count, SUM(AVAILABLE_COUNT_LENGTH) AS available_count_length
FROM EQUIP_VIEW_TABLE
GROUP BY state_code, city_code, equipment_type )
pivot (MAX(available_count)
FOR (equipment_type_cnt) IN
('Sandbag' "CNT_SANDBAG",
'Polyethylene Sheeting' "CNT_POLYETHYLENE_SHEETING",
'Pump' "CNT_PUMP"))
pivot (MAX(available_count_length)
FOR (equipment_type_len) IN
('Gabion Basket' "CNT_GABION_BASKET",
'Rapid Deployment Floodwall' "CNT_RAPID_DEPLOYMENT_FLOODWALL",
'Portable Coffer Dam' "CNT_PORTABLE_COFFER_DAM"))
我想基本上添加另一个轴部,而且我认为这是工作,但它重复值,并将它们放在不同的行。结果集看起来像
STATE CITY SANDBAGS SHEET PUMP BASKET FLOODWALL DAM
Texas Austin 12 89 8 16 - -
Texas Austin 12 89 8 - 11 -
Texas Austin 12 89 8 - - 16
它复制在我的结果集的行。我会在同一行上需要所有这些值。我一直在尝试不同的想法,但我仍然得到重复的价值观。任何帮助,将不胜感激。在此先感谢您的帮助。如果我的问题太复杂,或者我没有足够解释,我会发布更多信息。谢谢。
请为此设置一个sql小提琴。 –
好的,我会看看我能做什么 – user1898629