在这里,我想得到一组数据,但是又不能直接得到,很头疼,细节如下: 一张表,存储有用户的一些基本信息,比如,出生年月,报名日期,应收金额,实收金额等; 另一张表,存储有不同年龄段的一些信息,比如腾讯Q的找人功能,根据用户筛选条件不同,来找不同的年龄段的数据。 问题就在于,这些数据是直接得不到的。
分享如下:
SELECT datediff(year,fdtmborndate,fdtmdate) AS fintAge,flotShouldAmount,flotSumAmount,CAST('' AS VARCHAR) AS fchrAgeScopeID INTO #t FROM vw_Dfss_Registration WHERE 1=1 AND 9=9
第一步:根据vw_Dfss_Registration视图得到这里可以得到的一些基本信息,如,计算出来的年龄,应收金额,实收金额,并给他一个字段位置。存储到一张临时表里面。下面的where条件是具体项目中的特殊含义,不必理会。
UPDATE #t SET fchrAgeScopeID=s.fchrAgeScopeID FROM dbo.AgeScope s WHERE #t.fintAge BETWEEN s.fintAgeS AND s.fintAgeE AND fintScopeType=1
第二步:在存储年龄段的表里面让每个用户自己对号入座,找到自己属于哪个年龄段了人,那么更新临时表中的年龄信息,更新的依据条件是前面的ID。这样我就把不同人他到底属于哪个年龄段了,给弄到临时表里面了。
SELECT s.fchrDesc,COUNT(*) AS fintCount,SUM(flotShouldAmount) AS flotShouldAmount ,SUM(flotSumAmount) AS flotSumAmount,ROUND( SUM(flotSumAmount)/COUNT(*),0) AS flotPerAvg ,convert(varchar,round(cast(COUNT(*)as float)/cast((SELECT count(*) FROM #t)as float),4)*100)+'%' percentage FROM #t INNER JOIN dbo.AgeScope s ON #t.fchrAgeScopeID = s.fchrAgeScopeID GROUP BY #t.fchrAgeScopeID,s.fchrDesc ORDER BY fchrDesc ASC
第三步:不用多解释了,根据需求显示需要的字段信息。
DROP TABLE #t
最后,释放临时表。