求教SQL按多条件统计某个字段的值,该如何处理
求教SQL按多条件统计某个字段的值
比如有一张表,字段有四个,KHH,DATE,FHJE,SKJE,现需统计数据要求如下,找出所有数据中前20个DHJE大于SKJE,值为SKJE-FHJE,对找出的20个数据统计5天内的SKJE-FHJE,10天内的SKJE-FHJE,15天之前的SKJE-FHJE。
select top 20 a.khh,
sum(case when isnull(a.SKJE,0)<isnull(a.FHJE,0) then (isnull(a.FHJE,0)-isnull(a.SKJE,0)) else 0 end) as yszk
from View_XSHTTZH a
group by a.khh
后面的就不会写了
请大神们帮忙
------解决方案--------------------
5天内---是以当前系统日期作比较?
以下举个例子,自己调试一下结果是否正确
比如有一张表,字段有四个,KHH,DATE,FHJE,SKJE,现需统计数据要求如下,找出所有数据中前20个DHJE大于SKJE,值为SKJE-FHJE,对找出的20个数据统计5天内的SKJE-FHJE,10天内的SKJE-FHJE,15天之前的SKJE-FHJE。
select top 20 a.khh,
sum(case when isnull(a.SKJE,0)<isnull(a.FHJE,0) then (isnull(a.FHJE,0)-isnull(a.SKJE,0)) else 0 end) as yszk
from View_XSHTTZH a
group by a.khh
后面的就不会写了
请大神们帮忙
------解决方案--------------------
5天内---是以当前系统日期作比较?
以下举个例子,自己调试一下结果是否正确
DECLARE @Dt DATETIME
SET @Dt = CONVERT(VARCHAR(10), GETDATE() + 1, 120)
SELECT a.khh
,SUM(CASE WHEN DATEDIFF(dd, a.[DATE], @Dt) < 5
THEN ISNULL(a.SKJE, 0) - ISNULL(a.FHJE, 0)
ELSE 0
END) AS [5天内]
,SUM(CASE WHEN DATEDIFF(dd, a.[DATE], @Dt) < 10
THEN ISNULL(a.SKJE, 0) - ISNULL(a.FHJE, 0)
ELSE 0
END) AS [10天内]
,SUM(CASE WHEN DATEDIFF(dd, a.[DATE], @Dt) < 15
THEN ISNULL(a.SKJE, 0) - ISNULL(a.FHJE, 0)
ELSE 0
END) AS [15天内]
,SUM(CASE WHEN DATEDIFF(dd, a.[DATE], @Dt) >= 15
THEN ISNULL(a.SKJE, 0) - ISNULL(a.FHJE, 0)
ELSE 0
END) AS [15天之前]
FROM View_XSHTTZH AS a
WHERE ISNULL(a.SKJE, 0) < ISNULL(a.FHJE, 0)
AND a.khh IN (
SELECT TOP 20
khh
FROM View_XSHTTZH
GROUP BY khh
ORDER BY SUM(CASE WHEN ISNULL(SKJE, 0) < ISNULL(FHJE, 0)
THEN ISNULL(FHJE, 0) - ISNULL(SKJE, 0)
ELSE 0
END) DESC )
GROUP BY a.khh