MSSQL中按类别划分的每日总计
大家好,我有一个数据库,如下所示:MSSQL中按类别划分的每日总计,sql,sql-server,Sql,Sql Server,大家好,我有一个数据库,如下所示: TransactionID DateTime Amount Country ----------------------------------------------------- T123456 2013-05-01 100 US T123457 2013-05-01 150 US T123458
TransactionID DateTime Amount Country
-----------------------------------------------------
T123456 2013-05-01 100 US
T123457 2013-05-01 150 US
T123458 2013-05-01 200 CN
T123459 2013-05-01 250 CN
T123460 2013-05-02 250 TW
T123461 2013-05-02 350 ID
T123462 2013-05-02 200 TW
T123463 2013-05-02 50 ID
T123464 2013-05-02 250 TW
T123465 2013-05-03 450 TW
T123466 2013-05-03 350 ID
T123467 2013-05-03 200 TW
T123468 2013-05-03 150 CN
T123469 2013-05-03 350 US
是否可以使用MSSQL生成以下结果
DateTime Amount Country
-----------------------------------
2013-05-01 700 Total
2013-05-01 450 CN
2013-05-01 250 US
2013-05-02 1100 Total
2013-05-02 700 TW
2013-05-02 400 ID
2013-05-03 1500 Total
2013-05-03 650 TW
2013-05-03 350 ID
2013-05-03 350 US
2013-05-03 150 CN
谢谢。有点联合
SELECT u.DateTime, u.Amount, u.Country
FROM (
SELECT DateTime, SUM(Amount) as Amount, Country
FROM Table1
GROUP BY DateTime, Country
UNION
SELECT DateTime, SUM(Amount) as Amount, 'Total' as Country
FROM Table1
GROUP BY DateTime) u
ORDER BY u.Datetime,
CASE WHEN u.Country = 'Total' THEN 0 else 1 END,
u.Country
有点联合
SELECT u.DateTime, u.Amount, u.Country
FROM (
SELECT DateTime, SUM(Amount) as Amount, Country
FROM Table1
GROUP BY DateTime, Country
UNION
SELECT DateTime, SUM(Amount) as Amount, 'Total' as Country
FROM Table1
GROUP BY DateTime) u
ORDER BY u.Datetime,
CASE WHEN u.Country = 'Total' THEN 0 else 1 END,
u.Country
您通常会使用rollup或类似的子句执行此操作:
select DateTime, sum(amount) as Amount, coalesce(country, 'Total')
from t
group by rollup(country), DateTime
您通常会使用rollup或类似的子句执行此操作:
select DateTime, sum(amount) as Amount, coalesce(country, 'Total')
from t
group by rollup(country), DateTime
总数必须在每天的顶部。@DragonZelda您可以在SqlFiddle中找到Gordon答案的有序版本。您也可以使用ORDER BY子句,而无需子查询@AlexanderFedorenko您是对的,因为所有国家的总和应该大于按县的总和。但是,如果一天只有一个国家,这仅仅取决于联盟的顺序吗?是说联盟的第一部分和第二部分是总数?是的,你是对的,如果一天只有一个国家,它就不起作用;和+1用于澄清总数必须在每天的顶部。@DragonZelda您可以在SqlFiddle中找到Gordon答案的有序版本。您也可以使用ORDER BY子句而不使用子查询@AlexanderFedorenko您是对的,因为所有国家的总和应该大于按县的总和。但是,如果一天只有一个国家,这仅仅取决于联盟的顺序吗?是说联盟的第一部分和第二部分是总数?是的,你是对的,如果一天只有一个国家,它就不起作用;和+1进行澄清