簡體   English   中英

SQL 為每個屬性添加總和行

[英]SQL Add total sum row for each property

我正在嘗試為每個 state 創建一個新的總和行。

樣品表:

| State | Item | Amount
    A      X      100
    B      Y      200
    A      Z      100
    B      X      150

結果:

| State | Item | Amount
    A      X      100
    A      Z      100
 Total A          200
    B      Y      200
    B      X      150
 Total B          350

是否有可用於執行該表的 SQL 查詢

試試下面的查詢。

SELECT * FROM states_YourtableName
    UNION
    SELECT 'Total '+[state] State ,'' Item ,SUM(Amount) Amount
    FROM states_YourtableName GROUP BY [State]

您將獲得如下 output

state   Item    Amount
A        X      100
A        Z      100
B        X      150
B        Y      200
Total A         200
Total B         350

在 SQL 服務器中,您可以在GROUP BY子句上使用ROLLUP來獲取按字段分組的中間和總和。 在您的情況下,您將按 state 和 item 分組以獲取所有行:

SELECT CASE WHEN State IS NULL THEN 'Grand Total'
            WHEN Item IS NULL THEN CONCAT('Total ', State)
            ELSE State
       END AS State,
       Item, 
       SUM(Amount) AS Amount
FROM data
GROUP BY ROLLUP(State, Item)

Output:

State           Item    Amount
A               X       100
A               Z       100
Total A         (null)  200
B               X       150
B               Y       200
Total B         (null)  350
Grand Total     (null)  550

SQLFiddle 上的演示

最簡單的方法是UNION ALL 如果顯示 state 而不是“Total <state>”就足夠了,則變為:

select state, item, amount from mytable
union all
select state, null, sum(amount) from mytable group by state
order by state, case when item is null then 2 else 1 end, item;

結果:

State | Item | Amount
------+------+-------
    A |    X |    100
    A |    Z |    100
    A |      |    200
    B |    Y |    200
    B |    X |    150
    B |      |    350

SQL 不是 excel 文件,它主要用於存儲和處理數據。 如果您想將該數據(總計)存儲在 SQL 中,我認為最好的方法是創建另一個可以保存總計的表。

如果您只想在屏幕上打印總數,您可以查看鏈接https://www.w3schools.com/sql/sql_count_avg_sum.asp

您可以將 group by 與 Rollup 一起使用

嘗試這個 -

declare @Data table
([State] varchar(20), Item varchar(20), Amount int )

Insert into @Data
values
(    'A',      'X',      100),
(    'B',      'Y',      200),
(    'A',      'Z',      100),
(    'B',      'X',      150)

Select [State], Item, Sum(Amount) Amount
From @Data
Group by [State], Item with Rollup

我推薦grouping sets 它提供了比rollup更多的控制:

select state, coalesce(item, 'Total') as item,
       sum(amount) as amount
from t
group by grouping sets ( (state, item), (state) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM