Sql 获取表列中每个值的计数

Sql 获取表列中每个值的计数,sql,sql-server-2005,Sql,Sql Server 2005,我使用的是SQLServer2008,我有一个表,其中有一个“Status”列。有五种可能的状态:已提交、正在进行、已删除、已实施、未实施 我正在尝试编写一个SQL语句,它将返回每个状态的计数,但我的代码要么返回状态数,要么返回特定状态的计数。以下是我的工作内容: SELECT COUNT(ServiceAreaID) AS ServiceArea FROM Suggestions WHERE (ServiceAreaID = 6) 还是这个 SELECT

我使用的是SQLServer2008,我有一个表,其中有一个“Status”列。有五种可能的状态:已提交、正在进行、已删除、已实施、未实施

我正在尝试编写一个SQL语句,它将返回每个状态的计数,但我的代码要么返回状态数,要么返回特定状态的计数。以下是我的工作内容:

SELECT     COUNT(ServiceAreaID) AS ServiceArea
FROM         Suggestions
WHERE     (ServiceAreaID = 6)
还是这个

SELECT     COUNT(DISTINCT ServiceAreaID) AS ServiceArea
FROM         Suggestions
首先:

SELECT Status, COUNT(*)
FROM dbo.Suggestions
WHERE ServiceAreaID = 6
GROUP BY Status;
所有人:

SELECT ServiceAreaID, Status, COUNT(*)
FROM dbo.Suggestions
GROUP BY ServiceAreaID, Status;
这将为您提供每个服务区域id的计数。将组中的服务区域id替换为您的状态(如果需要,下面包括与serviceAreaID分开的状态列)


我想你要找的是这样的东西:

SELECT ServiceAreaID, COUNT(ServiceAreaID) AS COUNT
FROM Suggestions
GROUP BY ServiceAreaID
我在您的SQL示例中没有看到
Status
列,但如果应该有一列,查询将更像这样:

SELECT ServiceAreaID, COUNT(ServiceAreaID) AS COUNT
FROM Suggestions
GROUP BY ServiceAreaID
这个答案基本上与Aaron的答案相同,因此如果这是您想要的答案,请确保将Aaron标记为答案。

SELECT ServiceAreaID, Status, COUNT(*) AS COUNT
FROM Suggestions
GROUP BY ServiceAreaID, Status

您想知道每个
ServiceAreaID
在表中出现了多少次吗?
status
列在哪里?根据他的代码示例,我假设status列是
ServiceAreaID
。因此,我的评论是,如果状态栏不同(只能使用OP给我的信息),他可以通过阅读我确定的问题来替换状态栏。@negzero7:Aaron Bertrand应该在这里接受。他首先给了你正确的答案。我同意,Aaron在30秒内就得到了答案。这个查询似乎完全忽略了
ServiceAreaID
。不幸的是,这个语法不起作用。您需要按ServiceAreaID分组,或者将其从选择中删除。
Status
列如何?我想知道这一点,但我在他的示例中没有看到任何对状态的引用。我想加上它不会有什么坏处。+1因为你没有得到接受,这是你应得的。我希望这能提供一些安慰;-)
SELECT ServiceAreaID, COUNT(ServiceAreaID) AS COUNT
FROM Suggestions
GROUP BY ServiceAreaID
SELECT ServiceAreaID, Status, COUNT(*) AS COUNT
FROM Suggestions
GROUP BY ServiceAreaID, Status