Я пытаюсь написать запрос по приведенному ниже сценарию.
Результат
Пример:
ColumnA ColumnB
A B
B C
Результат:
ColumnA countB countC
A 1 0
B 0 1


Он должен работать:
Select
columnA,
count(ColumnB) as ColumnB,
count(ColumnC) as ColumnC
From Table
Group By
columnA
извините за некорректный вопрос. Пожалуйста, проверьте отредактированный
Для подтверждения этого недостаточно примеров данных, но, судя по заголовку вашего вопроса, вы, похоже, ищете агрегацию условий:
SELECT
columnA,
COUNT(CASE WHEN columnB = 'B' THEN 1 END) countB,
COUNT(CASE WHEN columnB = 'C' THEN 1 END) countC
FROM mytable
GROUP BY columnA
Помните, что COUNT(column) считает только ненулевые значения.
@jarlh: верно. Я упростил запрос соответственно, спасибо!
извините за некорректный вопрос. пожалуйста, смотрите обновленный
Предполагая, что ваш реальный сценарий больше, я думаю, что лучше использовать сводную точку.
DECLARE @table TABLE(ColumnA CHAR(1), ColumnB CHAR(1))
INSERT @table VALUES ('A', 'B')
INSERT @table VALUES ('B', 'C')
SELECT ColumnA, A AS CountA, B AS CountB, C AS CountC, D AS CountD....
FROM
(
SELECT ColumnA, ColumnB
FROM @table
) AS Source
PIVOT
(
Count(ColumnB)
FOR ColumnB IN ([A], [B], [C], [D].....)
) AS Pvt
Из ваших выборочных данных агрегация не требуется:
SELECT columnA,
(CASE WHEN columnB = 'B' THEN 1 ELSE 0 END) as countB,
(CASE WHEN columnB = 'C' THEN 1 ELSE 0 END) as countC
FROM t;
В заголовке сказано, что вам нужно сделать: GROUP BY для одного столбца и COUNT() для остальных.