Нужна помощь в упрощении запроса SQL - PullRequest
0 голосов
/ 02 октября 2019

2 запроса в конце этого кода возвращают нужные мне данные. Мне просто интересно, если это можно сделать в 1 запросе:

CREATE TABLE [dbo].[Test](
    [TimeStamp] [date] NOT NULL,
    [Person] [varchar](5) NOT NULL,
    [ColumnA] [varchar](1) NOT NULL,
    [ColumnB] [varchar](1) NOT NULL
) ON [PRIMARY]
GO

INSERT Test VALUES('2019-10-01', 'Bill', 'Y', 'N')
INSERT Test VALUES('2019-10-01', 'Joe', 'N', 'Y')
INSERT Test VALUES('2019-10-02', 'Bill', 'Y', 'Y')
INSERT Test VALUES('2019-10-03', 'Bill', 'Y', 'Y')
INSERT Test VALUES('2019-10-04', 'Joe', 'Y', 'Y')

SELECT COUNT(ColumnA) AS ColumnACount FROM Test WHERE ColumnA = 'Y' AND Person = 'Bill'
SELECT COUNT(ColumnB) AS ColumnBCount FROM Test WHERE ColumnB = 'Y' AND Person = 'Bill' 

Запрос должен вернуть 2 поля, CoilumnACount и ColumnBCount со значениями 3 и 2 соответственно.

1 Ответ

1 голос
/ 02 октября 2019

Используйте case выражения для условного подсчета:

SELECT COUNT(case when ColumnA = 'Y' then 1 end) AS ColumnACount,
       COUNT(case when ColumnB = 'Y' then 1 end) AS ColumnBCount
FROM Test
WHERE Person = 'Bill' and 'Y' in (ColumnA, ColumnB)

'Y' in (ColumnA, ColumnB) на самом деле не требуется, но может ускорить процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...