Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL中按类别划分的每日总计_Sql_Sql Server - Fatal编程技术网

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进行澄清