Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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
Sql 如何按行和字段的具体值进行汇总_Sql_Sql Server - Fatal编程技术网

Sql 如何按行和字段的具体值进行汇总

Sql 如何按行和字段的具体值进行汇总,sql,sql-server,Sql,Sql Server,我必须对表运行查询,以获得每个特定字段值的总和。 rechargedate originid ------------------------ 2015-02-02 3 2015-02-02 3 2015-02-02 1 2015-02-02 1 2015-02-02 3 2015-02-02 2 2015-02-01 2 2015-02-01 3 2015-02-01 1 2015-02-01

我必须对表运行查询,以获得每个特定字段值的总和。

rechargedate    originid
------------------------
2015-02-02      3
2015-02-02      3
2015-02-02      1
2015-02-02      1
2015-02-02      3
2015-02-02      2
2015-02-01      2
2015-02-01      3
2015-02-01      1
2015-02-01      1
2015-02-01      2
查询结果应该如下所示:

rechargedate    orig1   orig2   orig3
-------------------------------------
2015-02-02      2       1       3
2015-02-01      2       2       1

如何使用MS SQL 2008实现这一点?

您可以使用条件聚合:

CREATE TABLE #temp(
    RechargeDate    DATE,
    OriginID        INT
)
INSERT INTO #temp VALUES
('2015-02-02', 3),('2015-02-02', 3),('2015-02-02', 1),
('2015-02-02', 1),('2015-02-02', 3),('2015-02-02', 2),
('2015-02-01', 2),('2015-02-01', 3),('2015-02-01', 1),
('2015-02-01', 1),('2015-02-01', 2);

SELECT
    RechargeDate,
    orig1 = SUM(CASE WHEN OriginID = 1 THEN 1 ELSE 0 END),
    orig2 = SUM(CASE WHEN OriginID = 2 THEN 1 ELSE 0 END),
    orig3 = SUM(CASE WHEN OriginID = 3 THEN 1 ELSE 0 END)
FROM #temp
GROUP BY RechargeDate
ORDER BY RechargeDate DESC

DROP TABLE #temp
结果

RechargeDate orig1       orig2       orig3
------------ ----------- ----------- -----------
2015-02-02   2           1           3
2015-02-01   2           2           1

您可以使用条件聚合:

CREATE TABLE #temp(
    RechargeDate    DATE,
    OriginID        INT
)
INSERT INTO #temp VALUES
('2015-02-02', 3),('2015-02-02', 3),('2015-02-02', 1),
('2015-02-02', 1),('2015-02-02', 3),('2015-02-02', 2),
('2015-02-01', 2),('2015-02-01', 3),('2015-02-01', 1),
('2015-02-01', 1),('2015-02-01', 2);

SELECT
    RechargeDate,
    orig1 = SUM(CASE WHEN OriginID = 1 THEN 1 ELSE 0 END),
    orig2 = SUM(CASE WHEN OriginID = 2 THEN 1 ELSE 0 END),
    orig3 = SUM(CASE WHEN OriginID = 3 THEN 1 ELSE 0 END)
FROM #temp
GROUP BY RechargeDate
ORDER BY RechargeDate DESC

DROP TABLE #temp
结果

RechargeDate orig1       orig2       orig3
------------ ----------- ----------- -----------
2015-02-02   2           1           3
2015-02-01   2           2           1

最简单的方法是使用CASE语句创建所需的列,然后进行求和,例如

SELECT rechargedate,
     SUM(CASE WHEN originid = 1 THEN 1 ELSE 0 END) AS orig1,
     SUM(CASE WHEN originid = 2 THEN 1 ELSE 0 END) AS orig2,
     SUM(CASE WHEN originid = 3 THEN 1 ELSE 0 END) AS orig3
FROM {your_table}
GROUP BY rechargedate
ORDER BY rechargedate DESC

最简单的方法是使用CASE语句创建所需的列,然后进行求和,例如

SELECT rechargedate,
     SUM(CASE WHEN originid = 1 THEN 1 ELSE 0 END) AS orig1,
     SUM(CASE WHEN originid = 2 THEN 1 ELSE 0 END) AS orig2,
     SUM(CASE WHEN originid = 3 THEN 1 ELSE 0 END) AS orig3
FROM {your_table}
GROUP BY rechargedate
ORDER BY rechargedate DESC

使用
透视
。检查以了解
SQL SERVER中的
PIVIOT

SELECT rechargedate, 
       [1] AS orig1,
       [2] AS orig2,
       [3] AS orig3 
FROM #TEST
PIVOT(COUNT(originid) FOR originid IN([1],[2],[3])) AS Piv
ORDER BY rechargedate DESC

使用
透视
。检查以了解
SQL SERVER中的
PIVIOT

SELECT rechargedate, 
       [1] AS orig1,
       [2] AS orig2,
       [3] AS orig3 
FROM #TEST
PIVOT(COUNT(originid) FOR originid IN([1],[2],[3])) AS Piv
ORDER BY rechargedate DESC

到目前为止,嘟嘟尝试了什么?到目前为止,嘟嘟尝试了什么?谢谢你,伊万夫,很接近,但不完全如此。这也是我的解决方案。我在结果集中得到了一些零。谢谢你,evanv,很接近,但不完全一样。这也是我的解决方案。我在结果集中得到了一些零。太棒了!这正是我想要的,而且很简单。非常感谢。太棒了!这正是我想要的,而且很简单。非常感谢。谢谢你,库马尔,我尝试了Wewe解决方案,因为它与我所尝试的类似,工作起来很有魅力。我感谢你的时间。谢谢你,库马尔,我尝试了Wewe解决方案,因为它与我所尝试的类似,工作起来很有魅力。谢谢你抽出时间。