Sql server 2005 如何在sql server中使用单个查询计算不同条件下的列数据?

Sql server 2005 如何在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

我使用下面的查询来计算基于单个条件的特定列数据

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-30001-40004001-5000,>5000,我想要所有条件的结果集

问候,


N.SRIRAM

我认为您确实需要将查询分为3个不同的查询-一个用于您需要的每个条件

我认为您确实需要将查询分为3个不同的查询-一个用于您需要的每个条件

未测试,但应该是正确的:

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)

您必须在GROUP BY子句中重复大小写表达式,或者将其全部放在子查询中,我已经修复了日期常量,使其明确无误。

未经测试,但应该是正确的:

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)

您必须在GROUP BY子句中重复大小写表达式,或者将其全部放在子查询中,我已修复了日期常量,以便它们明确无误。

谢谢您,先生。我修改了你的问题如下。谢谢你,先生。我修改了你的查询如下。