带有count和case语句的SQL查询
我需要找出有多少人在2006年、2007年、2008年三个不同年份的申报期结束日期后60天内、120天内、180天内、180天以上提交了完整的纳税申报表 下面的声明将给我所有的年 我需要每年和每种可能性的计数。。 无论如何,我可以做到这一点,没有2个查询带有count和case语句的SQL查询,sql,count,case,Sql,Count,Case,我需要找出有多少人在2006年、2007年、2008年三个不同年份的申报期结束日期后60天内、120天内、180天内、180天以上提交了完整的纳税申报表 下面的声明将给我所有的年 我需要每年和每种可能性的计数。。 无论如何,我可以做到这一点,没有2个查询 SELECT YEAR(A.FPE) AS "YEAR" ,CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) <
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'
我需要你的帮助
非常感谢请按您的案例陈述所代表的栏目分组:
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",
COUNT(1) AS "TOTAL"
FROM Table
WHERE
A.FPE BETWEEN '2006-01-01' AND '2008-12-31'
GROUP BY
"YEAR",
"NBR MTH"
此查询将为您提供每个唯一年份/NBR MTH组合的每条记录的计数。实际上,大多数DBMS不允许使用别名进行分组,因此必须使用别名
...
GROUP BY
YEAR(A.FPE),
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
与简单的“按年分组”不同,这将为丢失的记录选择0,例如,如果2008年没有6+个记录,则写入
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)
如果你希望120天和180天的计算只包括60岁以上和120岁以下的人,等等
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)
总和将超过100%:<60意味着<120甚至更多。我认为@op的意思是从0到60,从61到120等等。@Quassnoi,是的,添加了第二个查询以显示如何进行排他计数。。。但你们是如何在评论中突出显示文本的呢?请告诉我…@Charles Bretana:就像你在帖子中所做的那样,把文本用背勾和星号括起来。我知道这是一个古老的答案,但这正是我想要的。
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)