使用 GROUP BY 包括所有仓库的所有产品总数

moh*_*iri -1 sql t-sql sql-server

我有以下查询来获取每个仓库中每个产品的总数量:

SELECT 
    warehouse, product, SUM(quantity)
FROM
    inventory
GROUP BY warehouse, product
Run Code Online (Sandbox Code Playgroud)

这是我目前的结果:

    warehouse       product 
    San Fransisco   iPhone  260
    San Fransisco   Samsung 300
    San Jose        iPhone  300
    San Jose        Samsung 350
Run Code Online (Sandbox Code Playgroud)

我想包括每个仓库的产品总数。这是我的预期输出:

    warehouse       product 
    San Fransisco   iPhone  260
    San Fransisco   Samsung 300
    San Fransisco   Total   560
    San Jose        iPhone  300
    San Jose        Samsung 350
    San Jose        Total   650
    All warehouses  Total   1210
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

一种方法使用grouping sets

select warehouse, product, sum(quantity)
from inventory
group by grouping sets ( (warehouse, product), (warehouse), () );
Run Code Online (Sandbox Code Playgroud)

鉴于:您NULL可以coalesce()用来获取总计的键中没有值:

select coalesce(warehouse, 'Total') as warehouse,
       (case when warehouse is not null
             then coalesce(product, 'Total')
        end) as product,
       sum(quantity)
from inventory
group by grouping sets ( (warehouse, product), (warehouse), () );
Run Code Online (Sandbox Code Playgroud)

Theproduct很棘手,因为有时是NULL,有时是,Total有时是product