SqlServer数据库查询不同字段-年龄段分析

在这里,我想得到一组数据,但是又不能直接得到,很头疼,细节如下: 一张表,存储有用户的一些基本信息,比如,出生年月,报名日期,应收金额,实收金额等; 另一张表,存储有不同年龄段的一些信息,比如腾讯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

最后,释放临时表。

posted @ 2013-08-31 22:03  MiccNet  阅读(1271)  评论(0编辑  收藏  举报