zoukankan      html  css  js  c++  java
  • 年龄段统计

    
    --以出生日期来统计
    select nnd as '年龄段',count(*) as '人数' from
    (
    select
    case
    	when Birthday>= DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0) then '25岁以下'
    	when Birthday BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-30, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-26, 0) then '26-30'
    	when Birthday BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-35, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-30, 0) then '31-35'
    	when Birthday BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-40, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-36, 0) then '36-40'
    	when Birthday BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-45, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-40, 0) then '41-45'
    	when Birthday BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-50, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-46, 0) then '46-50'
    	else  '50岁以上'
    end
    as nnd from HR_Person WHERE IsLock=0)
    person
    group by nnd
    
    
    --工龄
    
    select nnd as '工作时间',count(*) as '人数' from
    (
    select
    case
    	when PoliceDate>= DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0) then '5年以下'
    	when PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-4, 0) then '6-10'
    	when PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-9, 0) then '11-15'
    	when PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-14, 0) then '16-20'
    	when PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-19, 0) then '21-25'	
    	else  '26岁以上'
    end
    as nnd from HR_Person WHERE IsLock=0)
    person
    group by nnd
    
    select nnd as '年龄段',count(*) as '人数',sex as '性别' from
    (
    select
    case
    when age>=1 and age<=10 then '1-10'
    when age>=11 and age<=20 then '11-20'
    when age>=21 and age<=30 then '21-30'
    when age>=31 and age<=40 then '31-40' else 'other'
    end
    as nnd,uname,sex from #t
    )
    a
    group by nnd,sex
    
    ALTER PROCEDURE [dbo].[SumPoliceDate]
    @strWhere VARCHAR(500)='',
    @pwd VARCHAR(100)='admin123'
    AS
    BEGIN
      -- routine body goes here, e.g.
      -- SELECT 'Navicat for SQL Server'
    DELETE FROM TempTable WHERE SumField='PoliceDate';
    
    INSERT INTO TempTable  SELECT
    Name='5年以下'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate>= DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,SortCode='1',Per='';  
    
    INSERT INTO TempTable  SELECT
    Name='6年-10年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,SortCode='2',Per=''; 
    
    INSERT INTO TempTable  SELECT
    Name='11年-15年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)
    ,SortCode='3',Per=''; 
    
    INSERT INTO TempTable  SELECT
    Name='15年-20年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)
    ,SortCode='4',Per='';
    
    INSERT INTO TempTable  SELECT
    Name='21年-25年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)
    ,SortCode='5',Per='';
    
    INSERT INTO TempTable  SELECT
    Name='25年以上'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate< DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,SortCode='6',Per='';  
    
    SELECT * FROM TempTable WHERE SumField='PoliceDate';
    END
    --
    
    
    ALTER PROCEDURE [dbo].[SumPoliceDate]
    @strWhere VARCHAR(500)='',
    @pwd VARCHAR(100)='admin123'
    AS
    BEGIN
      -- routine body goes here, e.g.
      -- SELECT 'Navicat for SQL Server'
    DELETE FROM TempTable WHERE SumField='PoliceDate';
    
    INSERT INTO TempTable  SELECT
    Name='5年以下'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate>= DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,SortCode='1',Per='';  
    
    INSERT INTO TempTable  SELECT
    Name='6年-10年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-5, 0)
    ,SortCode='2',Per=''; 
    
    INSERT INTO TempTable  SELECT
    Name='11年-15年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-10, 0)
    ,SortCode='3',Per=''; 
    
    INSERT INTO TempTable  SELECT
    Name='15年-20年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-15, 0)
    ,SortCode='4',Per='';
    
    INSERT INTO TempTable  SELECT
    Name='21年-25年'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0) AND DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-20, 0)
    ,SortCode='5',Per='';
    
    INSERT INTO TempTable  SELECT
    Name='25年以上'
    ,SumField='PoliceDate'
    ,ShuLiang = (SELECT Count(1) FROM [dbo].[HR_Person] WHERE IsLock=0 AND PoliceDate< DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)+@strWhere) 
    ,Birthday1=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,Birthday2=DATEADD(yy, DATEDIFF(yy,0,getdate())-25, 0)
    ,SortCode='6',Per='';  
    
    SELECT * FROM TempTable WHERE SumField='PoliceDate';
    END
    
    
    
    
    
  • 相关阅读:
    atitit.插件体系设计总结o73.doc
    Atitit.可视化编程jbpm6 的环境and 使用总结...
    atitit.团队建设总结o6o fix
    atitit.团队建设总结fx O622
    atitit.客户端连接oracle数据库的方式总结
    atitit.提升2--3倍开发效率--cbb体系的建设..
    atitit.微信项目开发效率慢的一些总结
    atitit.为什么java体系开发效率这样低的原因and解决
    atitit.无线网卡 不能搜索到WiFi 无线路由信号的解决不能上网
    atitit.技术选型方法总结为什么java就是比.net有前途
  • 原文地址:https://www.cnblogs.com/chenmfly/p/8993024.html
Copyright © 2011-2022 走看看