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 称为 EMPLOYEESemployeesEmployees,等等

但文本值并非如此,在 PIVOT 运算符的 IN 列表中,您正在使用的是区域名称的文本值。在您的 table 中,它们被定义为 'NE''NW' 等,但在您的查询中您将它​​们定义为 'ne''nw' 等。您可以在 'NE' 地区有大量销售,但在 'ne' 地区根本没有 none;事实上,该区域甚至不存在于您的 table 中。对你我来说,'ne' 可能看起来与 'NE' 相同,但对计算机而言却不同——除非你以某种方式告诉它,而在你的情况下,你不会。

Paul Maxwell 关于缺少的连接条件可能是正确的,但您根本没有得到任何计数的原因是我刚才解释的。您可能需要根据这两个答案的建议来修正您的查询。