Sql server sql查询中的多次计数
我需要一份来自数据库的报告,在那里我需要最终结果,比如 男性的数量,女性的数量,表现出对抗城市,最后对抗国家。 我一开始是这样的Sql server sql查询中的多次计数,sql-server,tsql,Sql Server,Tsql,我需要一份来自数据库的报告,在那里我需要最终结果,比如 男性的数量,女性的数量,表现出对抗城市,最后对抗国家。 我一开始是这样的 SELECT p.StateName, d.CityName, count(api.Gender) as Gender FROM dbo.Application_Personal_information as api INNER JOIN dbo.state as p ON api.State = p.ID INNER J
SELECT p.StateName, d.CityName,
count(api.Gender) as Gender
FROM dbo.Application_Personal_information as api INNER JOIN
dbo.state as p ON api.State = p.ID INNER JOIN
dbo.City as d ON api.City= d.ID
group by p.StateName, d.CityName
当我这么做的时候
SELECT p.StateName, d.CityName,
count(api.Gender = 'Male) as Male,
count(api.Gender = 'Female) as Female,
FROM dbo.Application_Personal_information as api INNER JOIN
dbo.state as p ON api.State = p.ID INNER JOIN
dbo.City as d ON api.City= d.ID
group by p.StateName, d.CityName
这给了我错误。
不正确的语法near=。
我还尝试了select语句
COUNT(select api.Gender from api where api.Gender ='Male') as Male,
但它也不起作用。
...
有什么想法吗?如果您使用的是SQL Server 2005或更高版本,您可以尝试PIVOT功能:
WITH CTE AS
( SELECT p.StateName,
d.CityName,
api.Gender
FROM dbo.Application_Personal_information as api
INNER JOIN dbo.state as p
ON api.State = p.ID
INNER JOIN dbo.City as d
ON api.City= d.ID
)
SELECT *
FROM CTE
PIVOT
( COUNT(Gender)
FOR Gender IN ([Male], [Female])
) pvt
请参阅下面的答案:如果您需要输出与您所显示的完全一致,那么它会稍微复杂一些。这同样有效——但我怀疑它会慢得多——但速度在这里可能不是问题。
SUM(Gender='Male')
在MySQL中也有效(因为TRUE
是1
和FALSE
是0
)那太好了。但它对MySQL更为通用,有时可能会让您感到困惑:)是的,您的查询更不依赖数据库。(我真的以为这是用MySQL标记的,是吗?)。我更喜欢COUNT()
而不是SUM()
,但我不认为有任何性能差异:COUNT(当Gender='Male'时为1,则为1,否则为空)
但当使用COUNT over SUM时,您不会收到关于空值的警告吗?PIVOT是在2005版中引入的:)@Madhivana Oops。。。编辑了我的答案。谢谢
WITH CTE AS
( SELECT p.StateName,
d.CityName,
api.Gender
FROM dbo.Application_Personal_information as api
INNER JOIN dbo.state as p
ON api.State = p.ID
INNER JOIN dbo.City as d
ON api.City= d.ID
)
SELECT *
FROM CTE
PIVOT
( COUNT(Gender)
FOR Gender IN ([Male], [Female])
) pvt