我有一个测试表来演示这个问题:
Id NetworkId CountryCode
1 1 de
2 2 de
3 2 de
4 2 de
5 1 us
6 1 us
7 1 us
8 2 us我需要输出这样的内容:
NetworkId CountryCode DistCount
1 de 1
2 de 3
1 us 3
2 us 1尝试查询
我找了好几个答案,却找不到我真正需要的东西。下面是第一个相关的问题和我尝试过的查询:Counting the rows of multiple distinct columns
查询:
SELECT NetworkId, CountryCode, COUNT(*) as DistCount
FROM (SELECT DISTINCT NetworkId, CountryCode FROM TestTable) AS FOO
GROUP BY NetworkId, CountryCode的结果是:
NetworkId CountryCode DistCount
1 de 1
1 us 1
2 de 1
2 us 1查询:
SELECT COUNT(DISTINCT(STR(NetworkId) + ',' + STR(CountryCode)))
FROM TestTable的结果是:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.我也尝试了这个问题的答案:How can I count distinct multiple fields without repeating the query?
查询:
SELECT
NetworkId,
CountryCode,
COUNT(*) OVER(PARTITION BY NetworkId, CountryCode) as DistCount
FROM TestTable
GROUP BY NetworkId, CountryCode结果:
NetworkId CountryCode DistCount
1 de 1
1 us 1
2 de 1
2 us 1如你所知,我很难弄清楚该怎么做.我觉得应该比较简单,但我遗漏了一些东西。
发布于 2012-12-11 00:05:17
如果Id在TestTable中是唯一的,而不是null (如果它是主键的话),那么这个查询将返回您指定的结果集:
SELECT NetworkId, CountryCode, Count(1) AS DistCount
FROM TestTable
GROUP BY NetworkId, CountryCode
ORDER BY NetworkId, CountryCode但是,如果Id列不是唯一的,并且您需要的是每个组中不同的非空Id值的计数,则可以添加distinct关键字:
SELECT NetworkId, CountryCode, Count(DISTINCT Id) AS DistCount
FROM TestTable
GROUP BY NetworkId, CountryCode
ORDER BY NetworkId, CountryCode给定示例数据,两个查询都将返回相同的结果。只有在组中有重复的Id值时,才会有差异。
发布于 2012-12-11 00:04:51
除非我搞错了,否则会有用的:
SELECT NetworkId, CountryCode, COUNT(Id) as DistCount
FROM TestTable
GROUP BY NetworkId, CountryCodehttps://stackoverflow.com/questions/13811451
复制相似问题