zoukankan      html  css  js  c++  java
  • 复杂年月处理.sql

    --定义基本数字表
    declare @T1 table(代码 int,名称 varchar(10),参加时间 datetime,终止时间 datetime)
    insert into @T1
        select 12,'单位1','2003/04/01','2004/05/01'
        union all select 22,'单位2','2001/02/01','2003/02/01'
        union all select 42,'单位3','2000/04/01','2003/05/01'
        union all select 25,'单位5','2003/04/01','2003/05/01'

    --定义年表
    declare @NB table(代码 int,名称 varchar(10),年份 int)
    insert into @NB
        select 12,'单位1',2003
        union all select 12,'单位1',2004
        union all select 22,'单位2',2001
        union all select 22,'单位2',2002
        union all select 22,'单位2',2003

    --定义月表
    declare @YB table(代码 int,名称 varchar(10),年份 int,月份 varchar(2))
    insert into @YB
        select 12,'单位1',2003,'04'
        union all select 22,'单位2',2001,'01'
        union all select 22,'单位2',2001,'12'

    --为年表+月表数据处理准备临时表
    select top 8246 y=identity(int,1753,1)
    into #tby from
        (select id from syscolumns) a,
        (select id from syscolumns) b,
        (select id from syscolumns) c

    --为月表数据处理准备临时表
    select top 12 m=identity(int,1,1)
    into #tbm from syscolumns

    /*--数据处理--*/
    --年表数据处理
    select a.*
    from(
    select a.代码,a.名称,年份=b.y
    from @T1 a,#tby b
    where b.y between year(参加时间) and year(终止时间)
    ) a left join @NB b on a.代码=b.代码 and a.年份=b.年份
    where b.代码 is null

    --月表数据处理
    select a.*
    from(
    select a.代码,a.名称,年份=b.y,月份=right('00'+cast(c.m as varchar),2)
    from @T1 a,#tby b,#tbm c
    where b.y*100+c.m between convert(varchar(6),参加时间,112)
        and convert(varchar(6),终止时间,112)
    ) a left join @YB b on a.代码=b.代码 and a.年份=b.年份 and a.月份=b.月份
    where b.代码 is null
    order by a.代码,a.名称,a.年份,a.月份

    --删除数据处理临时表
    drop table #tby,#tbm
  • 相关阅读:
    马士兵讲jsp项目--BBS项目分析笔记
    ubuntu 14.04中安装phpmyadmin即mysql图形管理界面
    Xman冬令营writeup
    python--gevent协程及协程概念
    python--multiprocessing多进程总结
    python--threading多线程总结
    浅析Java中print、printf、println的区别
    内存泄漏与内存溢出
    Java中==和equals的区别,equals和hashCode的区别
    vue五十七:电影院售票项目案例之使用swiper实现轮播功能
  • 原文地址:https://www.cnblogs.com/shihao/p/2506511.html
Copyright © 2011-2022 走看看