Как я могу вычислить данные столбца для разных условий, используя один запрос в sql server?

#sql-server-2005

#sql-server-2005

Вопрос:

Я использую приведенный ниже запрос для подсчета конкретных данных столбца на основе одного условия.

 SELECT COUNT(DISTINCT(S.INVOICENO)) AS LESSTWO , YEAR(S.invoicedate) YER, 
    Month(S.invoicedate) MNTH
FROM SALESDATA S 
where S.BILLINGTYPE='INVOICE' 
    AND (S.invoicedate >='4-1-2009' and S.invoicedate <='4-30-2010')
    AND S.TAXABLEAMT <=2000
GROUP BY YEAR(S.invoicedate) ,Month(S.invoicedate) 
ORDER BY YEAR(S.invoicedate) ,Month(S.invoicedate)
  

Но я должен вычислить еще для 3 условий. Возможно ли подсчитать на основе 3 условий (т.Е. 2001 — 3000,3001 — 4000, 4001 — 5000,>5000) и я хочу, чтобы результат был установлен для всех условий?

С уважением,

Н.ШРИРАМ

Ответ №1:

Непроверено, но должно быть примерно так:

 SELECT CASE
          WHEN S.TaxableAmt <= 2000 THEN '<=2000'
          WHEN S.TaxableAmt <= 3000 THEN '2001-3000'
          WHEN S.TaxableAmt <= 4000 THEN '3001-4000'
          ELSE '>5000'
       END as Bracket,
COUNT(DISTINCT(S.INVOICENO)) AS LESSTWO , YEAR(S.invoicedate) YER, 
    Month(S.invoicedate) MNTH
FROM SALESDATA S 
where S.BILLINGTYPE='INVOICE' 
    AND (S.invoicedate >='20090401' and S.invoicedate <='20100430')
GROUP BY
      CASE
          WHEN S.TaxableAmt <= 2000 THEN '<=2000'
          WHEN S.TaxableAmt <= 3000 THEN '2001-3000'
          WHEN S.TaxableAmt <= 4000 THEN '3001-4000'
          ELSE '>5000'
       END,
YEAR(S.invoicedate) ,Month(S.invoicedate) 
ORDER BY YEAR(S.invoicedate) ,Month(S.invoicedate)
  

Вам нужно повторить выражение case в GROUP BY предложении (или поместить все это в подзапрос), и я исправил ваши константы даты, чтобы они были однозначными.

Комментарии:

1. Спасибо, сэр. Я изменил ваш запрос, как показано ниже.

Ответ №2:

Я думаю, вам действительно нужно разделить запрос на 3 отдельных запроса — по одному для каждого из требуемых вами условий