【问题标题】:"Each GROUP BY expression must contain at least one column that is not an outer reference" with "grouping set"“每个 GROUP BY 表达式必须包含至少一列不是外部引用”和“分组集”
【发布时间】:2020-05-10 19:48:02
【问题描述】:

我有以下 SQL 查询,我的目标是制作小计和一般总计,按产品对小计进行分组,但我的问题是,如果我只使用“分组依据”,他将不得不添加所有“选择”的字段,结果将不是所需的。所以我尝试使用“分组集”,但它给出了以下错误

“每个 GROUP BY 表达式必须包含至少一列不是外部引用”

有没有人可以解决上述问题或只能按产品分组?

SELECT 
    p.id_product,
    p.name,
    dd.name ,
    isnull(p.internal code, '------'),
    {fn CONCAT(CAST(d.id_division AS varchar), {fn CONCAT(' - ', d.name)}) },
    sum(vs.value1),
    sum(p.value2),
    sum(p.value2 * vs.value1)
FROM product p
    LEFT JOIN division d on d.id_division  = p.id_division
    LEFT JOIN division2 dd on dd.id_product = p.id_product
    LEFT JOIN value_stockroom vs on vs.id_product = p.id_product and vs.id_division2 = dd.id_division2
GROUP BY
    GROUPING SETS((p.id_product, p.name), (dd.name), (p.internal_code), (d.id_division, d.name), NULL)
ORDER BY 
    p.name, p.id_product, d.name

我是使用Grouping set 子句的新手

【问题讨论】:

    标签: sql sql-server select grouping-sets


    【解决方案1】:

    NULL 不允许在 GROUP BY 中使用,因为它是一个常量。你想要空括号:

    GROUP BY GROUPING SETS( (p.id_product, p.name), 
                            (dd.name),
                            (p.internal_code),
                            (d.id_division, d.name),
                            ()
                          )
    

    【讨论】:

    • 是否可以仅按产品或其他内容进行分组?
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多