#sql #sql-server #group-by
#sql #sql-сервер #группировка по
Вопрос:
Я пытаюсь сделать запрос, который показывает мне каждый регион, а затем сделать подсчет, чтобы увидеть, сколько контрактов mano у меня есть для каждого региона, но почему-то я получаю сообщение об ошибке ROLLUP (BO2.area)
Это запрос
SELECT
CASE WHEN BO2.area IS NULL THEN ISNULL(BO2.area, 'TOTAL') ELSE BO2.area END Area,
COUNT(BO.status = 'INSTALLED') Contracts
FROM
BO2
JOIN BO ON BO.bostamp = BO2.bo2stamp
GROUP BY
ROLLUP (BO2.area)
Ответ №1:
Следует использовать ГРУППИРОВКУ вместо проверки null, а внутри агрегата вам нужно выражение CASE. Итак:
SELECT
CASE WHEN GROUPING(BO2.area)=1 THEN 'TOTAL' ELSE BO2.area END Area,
SUM( CASE WHEN BO.status = 'INSTALLED' THEN 1 ELSE 0 END ) Contracts
FROM
BO2
JOIN BO ON BO.bostamp = BO2.bo2stamp
GROUP BY
ROLLUP (BO2.area)
Ответ №2:
ваш запрос завершается с ошибкой, потому что область — это число (я предполагаю), и вы хотите объединить его с текстом, поэтому вам нужно преобразовать его в строку:
SELECT
CASE WHEN GROUPING(BO2.area)=1 THEN (cast(BO2.area as varchar(100)),'TOTAL') ELSE BO2.area END as Area
, COUNT(CASE WHEN BO.status = 'INSTALLED' THEN 1 ELSE 0 END ) Contracts
FROM
BO2
JOIN BO ON BO.bostamp = BO2.bo2stamp
GROUP BY
ROLLUP (BO2.area)
Комментарии:
1.
BO2.area
на самом деле это текст, он показывает «Центр», «Север» и «Юг»2. @pauLo_0liveira тогда какое сообщение об ошибке вы получаете?