直接通过写一条复杂的SQL语句来解决性能会最优。SQL版的牛人一大堆。

解决方案 »

  1.   

    create view nlfb
    as
    SELECT distinct gzdw,(select count(*)
    from person as A
    where (datediff(day,csny,getdate())/365)<=30 
    and A.gzdw=B.gzdw) as ssyx,(select count(*)
    from person as A
    where 31<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=35
     and A.gzdw=B.gzdw) as sydsw,
    (select count(*)
    from person as A
    where 36<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=40
     and A.gzdw=B.gzdw) as sldsl,
    (select count(*)
    from person as A
    where 41<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=45
     and A.gzdw=B.gzdw) as sydsws,
    (select count(*)
    from person as A
    where 46<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=50
     and A.gzdw=B.gzdw) as sldwl,
    (select count(*)
    from person as A
    where 51<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=55
     and A.gzdw=B.gzdw) as wydww,
    (select count(*)
    from person as A
    where 56<=(datediff(day,csny,getdate())/365) and (datediff(day,csny,getdate())/365)<=60
     and A.gzdw=B.gzdw) as wldll,(select avg(datediff(day,csny,getdate())/365)
    from person as A
    where A.gzdw=B.gzdw) as pjnl