--定義基本數字表
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
複雜年月處理 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...
sql複雜查詢
今天在review同事的 的時候,碰到乙個比較頭疼的資料庫查詢。例如,我想查列a的結果,但我要根據b列的值的情況來確定a列的輸出,說白了就是我可以自己控制得到的輸出。這個情況有兩種方法來實現。第一種是decode,這個關鍵字似乎只是oracle支援。而且也沒有解決我的問題,因為我覺得他類似於邏輯中的...
SQL 複雜查詢
近期碰到需要取日期最小的不同條件記錄的問題,請各位xdjm賜教!表a 表a 序號 材料 數量 入庫日期 1 a 8 2009 12 12 a 9 2009 12 53 b 12 2009 11 184 b 10 2009 11 195 c 5 2009 10 96 c 13 2009 11 8 想要...