需求:
已知表#temp2:
材料名稱 日期 數量
a1 2014-09-01 100
a1 2014-09-02 200
a2 2014-09-01 100
a2 2014-09-02 300
a3 2014-09-01 400
a3 2014-09-02 500
輸入:開始日期(2014-09-01) 結束日期(2014-09-25)
結果顯示如下:
材料名稱,2014-09-01,2014-09-02,2014-09-03,2014-09-04,........................2014-09-25
a1 , 100 , 200 , 600 , 700 .......................900
a2 , 200 , 400 , 600 , 700 .......................900
a3 , 400 , 200 , 600 , 700 .......................900
注:以上資料不準確,只是舉例說明
第一步動態建立表:
--判斷表是否存在,存在則刪除
if exists(select *
from sys.objects
where object_id = object_id(n'ds_icmoplant')
and type in ( n'u' ) )
begin
drop table ds_icmoplant
end--定義
declare
@fstr nvarchar(1000),--組合字串
@sql nvarchar(1000),--結果
@fsdates date,--開始日期
@fedates date --結束日期
--賦值
set @fsdates=@fsdate
set @fedates=@fedate
--迴圈得出組合字串
while @fsdates<=@fedates
begin
set @fstr= isnull(@fstr,'')+''' '''+' as '''+convert(varchar(100),@fsdates, 23)+''''+','
set @fsdates=dateadd(day, 1, @fsdates)
end--去掉最後乙個符號
set @fstr=substring(@fstr,1,len(@fstr)-1)
set @sql='select distinct 材料名稱,'+@fstr+' into ds_icmoplant from #temp2'
execute(@sql)
--結果如下
--select * from ds_icmoplan
第二步動態對列賦值:
--定義
declare
@ssql nvarchar(1000),--結果
@fsdatee date, --開始日期
@fedatee date, --結束日期
@fdate varchar(100), --賦值用
@fvalue varchar(100), --數量
@fclnumber varchar(255) --游標標量
declare x001 cursor for
select 材料名稱 from ds_icmoplan
open x001
fetch next from x001 into @fclnumber
while @@fetch_status = 0
begin
/* cursor logic */
set @fvalue=''
set @fsdatee=@fstarttime
set @fedatee=@fendtime
set @ssql=''
--迴圈查詢賦值
while @fsdatee<=@fedatee
begin
select @fvalue=數量 from #temp2 where fdatetime=@fsdatee and 材料名稱=@fclnumber
set @fdate='['+convert(varchar(100),@fsdatee, 23)+']'
set @ssql='update ds_icmoplan set '+@fdate+'='+''''+@fvalue+''''+' where 材料名稱='+''''+@fclnumber+''''
execute(@ssql)
set @fvalue=''
set @fsdatee=dateadd(day, 1, @fsdatee)
endfetch next from x001 into @fclnumber
endclose x001
deallocate x001
--結果如下
select * from ds_icmoplan
MSSQL 游標的使用
與windows或dos的 游標 不同,ms sql的游標是一種臨時的資料庫物件,既對可用來旋轉儲存在系統永久表中的資料行的副本,也可以指向儲存在系統永久表中的資料行的指標。游標為您提供了在逐行的基礎上而不是一次處理整個結果集為基礎的操作表中資料的方法。1 如何使用游標 1 定義游標語句 decla...
MSSQL 游標使用例項
declare mycursor cursor forselect iglidenum,saccflag,a.sdeptno,saccman,ent mobil,daccdate,dsfinishdate from eg shl accept asa,eg sys entry ase where s...
mssql游標的簡單應用
游標修改資料 declare alarm cursor cursor global scroll for select lsc id,station id,alarm time,clear time,start time,end time from tmptelemetertwoday open a...