Действительно ли возможно указать условие в количестве ()?

Решение, которое я нашел работавшим лучше всего, состояло в том, чтобы поместить "общие" файлы конфигурации в центральные файлы и затем использовать событие перед сборкой в Visual Studio для копирования их в относительную папку каждого проекта, для которого был нужен он.

363
задан Michael 16 February 2018 в 11:58
поделиться

7 ответов

Если вы не можете просто ограничить сам запрос с помощью предложения where , вы можете использовать тот факт, что агрегат count учитывает только не -null values:

select count(case Position when 'Manager' then 1 else null end)
from ...

Вы также можете использовать агрегат sum аналогичным образом:

select sum(case Position when 'Manager' then 1 else 0 end)
from ...
627
ответ дан 23 November 2019 в 00:11
поделиться

Assuming you do not want to restrict the rows that are returned because you are aggregating other values as well, you can do it like this:

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount
from ...

Let's say within the same column you had values of Manager, Supervisor, and Team Lead, you could get the counts of each like this:

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount,
    count(case when Position = 'Supervisor' then 1 else null end) as SupervisorCount,
    count(case when Position = 'Team Lead' then 1 else null end) as TeamLeadCount,
from ...
204
ответ дан 23 November 2019 в 00:11
поделиться

Зависит от того, что вы имеете в виду, но другая интерпретация значения заключается в том, что вы хотите подсчитывать строки с определенным значением, но не хотите ограничивать SELECT ТОЛЬКО эти строки ...

Вы бы сделали это, используя SUM () с предложением в, например, вместо использования COUNT () : например

SELECT SUM(CASE WHEN Position = 'Manager' THEN 1 ELSE 0 END) AS ManagerCount,
    SUM(CASE WHEN Position = 'CEO' THEN 1 ELSE 0 END) AS CEOCount
FROM SomeTable
20
ответ дан 23 November 2019 в 00:11
поделиться

I think you can use a simple WHERE clause to select only the count some record.

0
ответ дан 23 November 2019 в 00:11
поделиться

Do you mean just this:

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

If so, then yup that works!

3
ответ дан 23 November 2019 в 00:11
поделиться
SELECT COUNT(*) FROM bla WHERE Position = 'Manager'
0
ответ дан 23 November 2019 в 00:11
поделиться

Вы также можете использовать ключевое слово Pivot, если используете SQL 2005 или выше

подробнее и из Technet

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

Test Data Set

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')
12
ответ дан 23 November 2019 в 00:11
поделиться