数据透视表计数不正确
Posted
技术标签:
【中文标题】数据透视表计数不正确【英文标题】:pivot table not counting properly 【发布时间】:2021-04-12 01:36:50 【问题描述】:我正在尝试使用数据透视表来按地区显示产品销售数量(总销售单位)。
这是期望的结果:
这是我的代码:
select * from
(
select p_code, reg_name, sale_units
from dwregion, dwsalesfact
)
pivot
(
sum(sale_units)
for reg_name
in ('ne', 'nw', 'se', 'sw')
)
这目前为我提供了我正在寻找的交叉表格格式,但是这些值都是空的(因为它们在每个单元格中都有一个短划线)
我也尝试过count(sale_units)
,但我的数据透视表中最后是 0。
如何解决这个问题以获得我想要的输出?
我也在使用Oracle live,你可以找到脚本文件here。
编辑: 尽管 Paul Maxwell 在代码块中显示了正确的连接语句,但我将 mathguy 标记为具有最佳解决方案,因为他在回答中提到了 Paul,并确定并解决了为什么我没有收到输出。
【问题讨论】:
请分享充足的数据 我刚刚看到你的EDIT。虽然 Paul Maxwell 显示了对您查询的join
部分的更正,但他的回答实际上并没有解决主要问题 - 他在 PIVOT
的 IN
列表中仍然具有相同的值,以小写形式显示.他没有确定您没有得到任何结果的原因,这是您提出的问题(而他确实确定了一个不同的问题并解释了如何解决它)。我相信这是将我的答案标记为“正确”答案的更好理由 - 它实际上回答了您的具体问题。
【参考方案1】:
表和列名(以及其他标识符)通常不区分大小写,因此您可以将表称为EMPLOYEES
或employees
或Employees
等。
但文本值并非如此,在PIVOT
运算符的IN
列表中,您正在使用的是:区域名称的文本值。在您的表中,它们被定义为'NE'
、'NW'
等,但在您的查询中,您将它们引用为'ne'
、'nw'
等。您可能在'NE'
区域有大量销售,但在'ne'
地区根本没有;实际上,您的表中甚至不存在该区域。对你和我来说,'ne'
可能看起来与 'NE'
相同,但对计算机来说却不是 - 除非你以某种方式告诉它,而在你的情况下,你没有。
Paul Maxwell 关于缺少的连接条件可能是正确的,但我刚才解释的原因是您根本没有得到任何计数。您可能需要使用两个答案的建议来修复您的查询。
【讨论】:
【参考方案2】:您尚未建立从事实表到区域的任何明确关系。 (虽然您创建了一个笛卡尔积/交叉连接,但这在这里并不准确。)我认为您需要同时连接客户表和区域表:
SELECT *
FROM (
SELECT fact.p_code
, reg.reg_name
, fact.sale_units
FROM dwsalesfact fact
INNER JOIN DWCUSTOMER cust ON fact.cus_code = cust.cust_code
INNER JOIN DWREGION reg ON cust.reg_id = reg.reg_id
)
PIVOT(
SUM(sale_units)
FOR reg_name IN ( 'ne' ,'nw' ,'se' ,'sw' )
)
【讨论】:
以上是关于数据透视表计数不正确的主要内容,如果未能解决你的问题,请参考以下文章