SQL Server 2008中表格结果的分组和计数选择
我有3个表(一个包含结果/投票,两个为查找表),如下所示: 投票 考虑上表具有以下测试数据:SQL Server 2008中表格结果的分组和计数选择,sql,sql-server-2008,tsql,group-by,Sql,Sql Server 2008,Tsql,Group By,我有3个表(一个包含结果/投票,两个为查找表),如下所示: 投票 考虑上表具有以下测试数据: 1,2,'Y' 1,3,'N' 2,1,'Y' 3,3,'N' 。。以此类推,areaid倍数,townid倍数,当然还有Y或N,如果投票的话 所以。。我试图找到最有效的方法来获得以下结果: 按areaid分组,获得不同的townid计数以及Y或N投票数 类似于(如果areadid和townid连接到名称的查找表): 我不确定这是否足够清楚。。非常感谢任何帮助 像这样的东西应该可以(未经测试): 对于
1,2,'Y'
1,3,'N'
2,1,'Y'
3,3,'N'
。。以此类推,areaid倍数,townid倍数,当然还有Y或N,如果投票的话
所以。。我试图找到最有效的方法来获得以下结果:
按areaid分组,获得不同的townid计数以及Y或N投票数
类似于(如果areadid和townid连接到名称的查找表):
我不确定这是否足够清楚。。非常感谢任何帮助 像这样的东西应该可以(未经测试):
对于包含的测试数据,能否给出一个示例结果(暂时忽略查找表)。尽管如此,我对这个设计还是有点不安……或者(用更多的语法修饰):
COUNT(NULLIF(v.votingyn,'N'))作为Yes,COUNT(NULLIF(v.votingyn,'Y'))作为No
。谢谢!忘记您可以使用case/when语句求和。。。非常有用!
1,2,'Y'
1,3,'N'
2,1,'Y'
3,3,'N'
area 1, town1, voting Y, voting N
-------------------------------------------------
AREA 1 TOWN 1 23 12
AREA 2 TOWN 2 15 7
SELECT a.Name AS 'Area', t.Name AS 'Town',
SUM(CASE v.votingyn WHEN 'Y' THEN 1 ELSE 0 END) AS 'Yes'
SUM(CASE v.votingyn WHEN 'N' THEN 1 ELSE 0 END) AS 'No'
FROM VOTES AS v
JOIN TOWN AS t ON v.townid = t.id
JOIN AREA AS a ON v.areaid = a.id
GROUP BY (a.Name, t.Name)