我在寻找的是将同一个表中的不同数据进行分组并计数,并将它们显示在两个不同的列中。如下所示。在列中计数值
数据表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
我在寻找的是将同一个表中的不同数据进行分组并计数,并将它们显示在两个不同的列中。如下所示。在列中计数值
数据表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
@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
使用两个单独的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
没时间写代码,但Case语句就是你想要的。如果它满足要求,那么它的值为1,如果不满足则为零。然后你可以对列进行求和。
你正在寻找一个交叉的解决方案。上述解决方案可以工作,但如果你想要一个通用的解决方案并且有N种类型的话你就会陷入僵局。
CrossTab解决方案将为您解决这个问题。如果这是为了快速处理一些数字,那么将数据转储到Excel中并使用本机数据透视表功能。
如果是针对应用程序中的RDBMS,则它取决于RDBMS。 MS SQL 2005及更高版本具有交叉表语法。见:
哎呀,我认为这将取决于RDMS;不确定它可以在ANSI SQL中完成。这是哪个数据库? –