Sql server 显示每个类别的sum()的列

Sql server 显示每个类别的sum()的列,sql-server,stored-procedures,Sql Server,Stored Procedures,我想要一个列,显示每个类别(90岁以上、60岁以上、30岁以上)的总和(金额) 试试这个 DECLARE @DATE VARCHAR(10) SET @DATE='2012-12-31' SELECT TRANDATE, TRANTYPE, INVNUM,SUM (AMOUNT), PAID, CLIENTID, SUM((CASE WHEN TRANDATE <= DATEADD(dd, -90, @DATE) THEN AMOUNT END )) AS 'OVER

我想要一个列,显示每个类别(90岁以上、60岁以上、30岁以上)的总和(金额)

试试这个

DECLARE @DATE VARCHAR(10)
SET @DATE='2012-12-31' 
SELECT TRANDATE, TRANTYPE, INVNUM,SUM (AMOUNT), PAID, CLIENTID, 

      SUM((CASE  WHEN TRANDATE <= DATEADD(dd, -90, @DATE) THEN  AMOUNT END )) AS 'OVER 90', 
      SUM((CASE  WHEN TRANDATE>DATEADD(dd, -90, @DATE) AND  TRANDATE<=DATEADD(dd, -60, @DATE) THEN AMOUNT END)) AS 'OVER 60' ,  
      SUM((CASE  WHEN TRANDATE>DATEADD(dd, -60, @DATE) AND  TRANDATE<=DATEADD(dd, -30, @DATE) THEN AMOUNT END))AS  'OVER 30' ,
      SUM((CASE  WHEN TRANDATE>DATEADD(dd, -30, @DATE) THEN AMOUNT END)) AS 'CURRENT'            
from Bill
where  TRANTYPE IN ('INV', 'PAY') AND   TRANDATE<=@DATE AND CLIENTID=7434
GROUP BY TRANDATE, TRANTYPE, INVNUM, PAID, CLIENTID
DECLARE@DATE VARCHAR(10)
设置日期为2012年12月31日
选择TRANDATE、TRANTYPE、INVNUM、SUM(AMOUNT)、PAID、CLIENTID、,
金额((当TRANDATE DATEADD(dd,-90,@DATE)和TranDateAdd(dd,-60,@DATE)以及TranDateAdd(dd,-30,@DATE)和金额结束时的情况)为“当前”
来自比尔

其中,输入('INV','PAY')和输入日期

将案例语句包装在一个
总和中

DECLARE @DATE VARCHAR(10)
SET @DATE='2012-12-31' 
SELECT TRANDATE, TRANTYPE, INVNUM,SUM (AMOUNT), PAID, CLIENTID, 
      SUM(CASE  WHEN TRANDATE <= DATEADD(dd, -90, @DATE) THEN  AMOUNT END ) AS 'OVER 90', 
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -90, @DATE) AND  TRANDATE<=DATEADD(dd, -60, @DATE) THEN AMOUNT END) AS 'OVER 60' ,  
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -60, @DATE) AND  TRANDATE<=DATEADD(dd, -30, @DATE) THEN AMOUNT END) AS  'OVER 30' ,
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -30, @DATE) THEN AMOUNT END) AS 'CURRENT'            
from Bill
where  TRANTYPE IN ('INV', 'PAY') AND   TRANDATE<=@DATE AND CLIENTID=7434
GROUP BY TRANDATE, TRANTYPE, INVNUM, PAID, CLIENTID 
DECLARE@DATE VARCHAR(10)
设置日期为2012年12月31日
选择TRANDATE、TRANTYPE、INVNUM、SUM(AMOUNT)、PAID、CLIENTID、,

SUM(当TRANDATE写一个查询时,不使用分组CASE语句来获取其中包含值的计算列

“90岁以上”、“60岁以上”、“30岁以上”根据记录,命名任何列,例如MySection

然后查询并将此查询分组为一个驱动查询-将提供所有字段和年龄的子查询包装到主查询中

,例如

    SELECT TRANDATE, TRANTYPE, INVNUM,MySection,SUM (AMOUNT), PAID, CLIENTID, 

from ( ... your derived query in here..) AS DQ
where  TRANTYPE IN ('INV', 'PAY') AND   TRANDATE<=@DATE AND CLIENTID=7434
GROUP BY TRANDATE, TRANTYPE, INVNUM, PAID, CLIENTID, MySection
选择TRANDATE、TRANTYPE、INVNUM、MySection、SUM(AMOUNT)、PAID、CLIENTID、,
作为DQ从(…此处的派生查询…)开始

其中输入('INV','PAY')和transdate此值是
超过90
超过60
超过30
的显示值,在每一列中不确定我是否遵循,请发布查询结果。@Goutam检查我发布的答案,我做你想做的。@Gautam我已更改查询您在case语句中检查的条件错误,请参阅upd一个
DECLARE @DATE VARCHAR(10)
SET @DATE='2012-12-31' 
SELECT TRANDATE, TRANTYPE, INVNUM,SUM (AMOUNT), PAID, CLIENTID, 
      SUM(CASE  WHEN TRANDATE <= DATEADD(dd, -90, @DATE) THEN  AMOUNT END ) AS 'OVER 90', 
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -90, @DATE) AND  TRANDATE<=DATEADD(dd, -60, @DATE) THEN AMOUNT END) AS 'OVER 60' ,  
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -60, @DATE) AND  TRANDATE<=DATEADD(dd, -30, @DATE) THEN AMOUNT END) AS  'OVER 30' ,
      SUM(CASE  WHEN TRANDATE<DATEADD(dd, -30, @DATE) THEN AMOUNT END) AS 'CURRENT'            
from Bill
where  TRANTYPE IN ('INV', 'PAY') AND   TRANDATE<=@DATE AND CLIENTID=7434
GROUP BY TRANDATE, TRANTYPE, INVNUM, PAID, CLIENTID 
    SELECT TRANDATE, TRANTYPE, INVNUM,MySection,SUM (AMOUNT), PAID, CLIENTID, 

from ( ... your derived query in here..) AS DQ
where  TRANTYPE IN ('INV', 'PAY') AND   TRANDATE<=@DATE AND CLIENTID=7434
GROUP BY TRANDATE, TRANTYPE, INVNUM, PAID, CLIENTID, MySection