pivot table 计数不正确
pivot table not counting properly
我正在尝试使用数据透视表 table 按地区显示产品销量(总 sale_units 售出)。
这是期望的结果:
这是我的代码:
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 结束 table。
我该如何解决这个问题以获得我想要的输出?
我也在使用 Oracle live,你可以找到脚本文件 here。
编辑: 尽管 Paul Maxwell 在代码块中显示了正确的连接语句,但我将 mathguy 标记为具有最佳解决方案,因为他在回答中提到了 Paul 以及确定并解决我没有收到输出的原因。
您还没有从 table 这一事实与该地区建立任何明确的关系。 (虽然您创建了笛卡尔 product/cross 连接,但此处并不准确。)您需要同时连接客户和区域 tables 我相信:
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' )
)
Table 和列名(以及其他标识符)通常不区分大小写,因此您可以将 table 称为 EMPLOYEES
或 employees
或 Employees
,等等
但文本值并非如此,在 PIVOT
运算符的 IN
列表中,您正在使用的是区域名称的文本值。在您的 table 中,它们被定义为 'NE'
、'NW'
等,但在您的查询中您将它们定义为 'ne'
、'nw'
等。您可以在 'NE'
地区有大量销售,但在 'ne'
地区根本没有 none;事实上,该区域甚至不存在于您的 table 中。对你我来说,'ne'
可能看起来与 'NE'
相同,但对计算机而言却不同——除非你以某种方式告诉它,而在你的情况下,你不会。
Paul Maxwell 关于缺少的连接条件可能是正确的,但您根本没有得到任何计数的原因是我刚才解释的。您可能需要根据这两个答案的建议来修正您的查询。
我正在尝试使用数据透视表 table 按地区显示产品销量(总 sale_units 售出)。
这是期望的结果:
这是我的代码:
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 结束 table。
我该如何解决这个问题以获得我想要的输出?
我也在使用 Oracle live,你可以找到脚本文件 here。
编辑: 尽管 Paul Maxwell 在代码块中显示了正确的连接语句,但我将 mathguy 标记为具有最佳解决方案,因为他在回答中提到了 Paul 以及确定并解决我没有收到输出的原因。
您还没有从 table 这一事实与该地区建立任何明确的关系。 (虽然您创建了笛卡尔 product/cross 连接,但此处并不准确。)您需要同时连接客户和区域 tables 我相信:
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' )
)
Table 和列名(以及其他标识符)通常不区分大小写,因此您可以将 table 称为 EMPLOYEES
或 employees
或 Employees
,等等
但文本值并非如此,在 PIVOT
运算符的 IN
列表中,您正在使用的是区域名称的文本值。在您的 table 中,它们被定义为 'NE'
、'NW'
等,但在您的查询中您将它们定义为 'ne'
、'nw'
等。您可以在 'NE'
地区有大量销售,但在 'ne'
地区根本没有 none;事实上,该区域甚至不存在于您的 table 中。对你我来说,'ne'
可能看起来与 'NE'
相同,但对计算机而言却不同——除非你以某种方式告诉它,而在你的情况下,你不会。
Paul Maxwell 关于缺少的连接条件可能是正确的,但您根本没有得到任何计数的原因是我刚才解释的。您可能需要根据这两个答案的建议来修正您的查询。