是否可以在Count()中指定一个条件?我希望只计算在Position列中有“Manager”的行。

我想在count语句中做,而不是用WHERE;我正在询问它,因为我需要在相同的SELECT(类似count (Position = Manager), count (Position = Other))中计算经理和其他,所以在这个例子中,WHERE对我来说没有用处。


当前回答

我认为您可以使用一个简单的WHERE子句来只选择count some记录。

其他回答

@Guffa的回答很好,只要指出可能用IF语句更干净就行了

select count(IIF(Position = 'Manager', 1, NULL)) as ManagerCount
from ...
SELECT COUNT(*) FROM bla WHERE Position = 'Manager'

你的意思是:

SELECT Count(*) FROM YourTable WHERE Position = 'Manager'

如果是这样,那么是的,这是可行的!

以下是我所做的,以获得一个数据集,其中包括每个集装箱内满足标准的总数和数量。让我来回答这个问题"有多少集装箱的货物超过X%大于51号"

select
   Schedule,
   PackageNum,
   COUNT (UniqueID) as Total,
   SUM (
   case
      when
         Size > 51 
      then
         1 
      else
         0 
   end
) as NumOverSize 
from
   Inventory 
where
   customer like '%PEPSI%' 
group by
   Schedule, PackageNum

如果使用SQL 2005或更高版本,也可以使用Pivot关键字

更多信息来自Technet

SELECT *
FROM @Users
PIVOT (
    COUNT(Position)
    FOR Position
    IN (Manager, CEO, Employee)
) as p

测试数据集

DECLARE @Users TABLE (Position VARCHAR(10))
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('CEO')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')