SQL查询与count和case语句 [英] SQL query with count and case statement

查看:317
本文介绍了SQL查询与count和case语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要查找有多少人在其提交期结束日期(fpe)的180天内在60天内提交(fil_dt)他们的纳税申报表,在120天内,180天内,在3个不同年份(2006年,2007年,2008)



下面的语句将给我所有的年份
i需要每年和每个可能性的计数..
无论如何我可以做这没有2个查询?

 选择年份(A.FPE)ASYEAR
,CASE
当天(A.FIL_DT) - 天(A.FPE) 60 THEN'2'
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) 120 THEN'4'
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) 180 THEN'6'
WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)> 180 THEN'6+'
结束为NBR MTH
在2006-01-01和2008-12-31之间的地区
解决方案



然后写

  SELECT YEAR(A.FPE)ASYEAR,
Sum WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)<60
THEN 1 Else 0 End)SixtydayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120
THEN 1 Else 0 End)OneTwentyDayCount,
Sum(CASEN WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)<180
THEN 1 Else 0 End)OneEightyDayCount ,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)> 180
THEN 1 Else 0 End)OverOneEightyCount
从表A
WHERE FPE BETWEEN'2006-01-01'AND'2008-12-31'
Group By YEAR(A.FPE)

如果您希望120天计数和180天计数仅包括60岁以上且小于120岁的人,则

  SELECT YEAR(A.FPE)ASYEAR,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) 60
THEN 1 Else 0 End)SixtydayCount,
Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)Between 60 And 119
THEN 1 Else 0 End)OneTwentyDayCount,
总和(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE)在120和179之间
THEN 1 Else 0 End)OneEightyDayCount,
总和(CASE WHEN DAYS(A.FIL_DT ) - DAYS(A.FPE)> = 180
THEN 1 Else 0 End)OverOneEightyCount
从表A
在2006-01-01和2008- 12-31'
Group By YEAR(A.FPE)


i need to find how many people have filed (fil_dt) their tax return within 60 days, withing 120 days, within 180 days, over 180 days of their filing period end date (fpe) for 3 different years (2006, 2007, 2008)

the statement below will give me ALL years i need a count for each year and for each possibility.. anyway i can do this without 2 queries ?

SELECT YEAR(A.FPE) AS "YEAR"
,CASE                                              
  WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 ' 
  WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 '
  WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 '
  WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+'
 END AS "NBR MTH"                                  
WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31'

i need your help thanks a lot

解决方案

then write

   SELECT YEAR(A.FPE) AS "YEAR",
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 
                  THEN 1 Else 0 End) SixtydayCount,  
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 
                  THEN 1 Else 0 End) OneTwentyDayCount,
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 
                  THEN 1  Else 0 End) OneEightyDayCount,
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 
                  THEN 1 Else 0 End)  OverOneEightyCount  
    From Table A
    WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
    Group By YEAR(A.FPE)

If you want the 120 day count and the 180 day count to only include the folks who are over 60 and less than 120, etc. then,

     SELECT YEAR(A.FPE) AS "YEAR",
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 
                  THEN 1 Else 0 End) SixtydayCount,  
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 60 And 119 
                  THEN 1 Else 0 End) OneTwentyDayCount,
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 120 And 179 
                  THEN 1  Else 0 End) OneEightyDayCount,
       Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) >= 180 
                  THEN 1 Else 0 End)  OverOneEightyCount  
    From Table A
    WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
    Group By YEAR(A.FPE)

这篇关于SQL查询与count和case语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆