Группировать по запросу с помощью свертки

#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 тогда какое сообщение об ошибке вы получаете?