我正在寻找的是分组并计算同一表中不同数据的总和,并将它们显示在两个不同的列中。如下所示。
表A中的数据
字段:
Name Type
Bob 1
John 2
Bob 1
Steve 1
John 1
Bob 2
查询所需的结果:
Name Type 1 Type 2
Bob 2 1
John 1 1
Steve 1 0
答案 0 :(得分:7)
这将在SQL Server中实现:
SELECT
name,
SUM( CASE type WHEN 1 THEN 1 ELSE 0 END) AS type1,
SUM( CASE type WHEN 2 THEN 1 ELSE 0 END) AS type2
FROM
myTable
GROUP BY
name
答案 1 :(得分:2)
没时间编写代码,但Case语句就是你想要的。如果它符合案例,则其值为1,如果不符合则为零。然后你可以对列进行求和。
答案 2 :(得分:0)
@Seb有一个很好的解决方案,但它依赖于服务器。这是一个备用的子选择应该是可移植的:
select
name,
(select count(type) from myTable where type=1 and name=a.name) as type1,
(select count(type) from myTable where type=2 and name=a.name) as type2
from
myTable as a
group by
name
答案 3 :(得分:0)
使用两个单独的GROUP BY子查询。
SELECT Name, a.Count1, b.Count2
from myTable
JOIN
(SELECT Name, SUM(Type) AS Count1 FROM myTable GROUP BY Name WHERE Type=1) AS a ON a.Name = myTable.Name
(SELECT Name, SUM(Type) FROM myTable GROUP BY Name WHERE Type=2) AS b ON b.Name = myTable.Name
答案 4 :(得分:0)
您正在寻找CrossTab解决方案。上述解决方案可行,但如果您需要通用解决方案并且有N种类型,那么您将会失败。
CrossTab解决方案将为您解决此问题。如果这是为了快速处理某些数字,那么将数据转储到Excel中并使用本机数据透视表功能。
如果是应用程序中的RDBMS,那么它取决于RDBMS。 MS SQL 2005及更高版本具有交叉表语法。参见: