SQL裡動態生成列

2021-07-04 09:53:48 字數 1461 閱讀 6024

一般這種比較複雜一點都用乙個儲存過程來寫比較好。因為單一的檢視不能滿足我們的需求。

類似這種,有規律可循的列。如果按照原始的方法 case、、、、when 、、、、then 、、、、、、end。我估計是又繁瑣又累,純粹的體力活啊。其實我最開始的時候就是醬寫的

不過好在有大神師傅的指點,簡單多了,而且這個區間值是可以改變的。**如下

首先在存過程裡定義幾個初始變數:

declare @step int--步長

declare @start int--開始值

declare @end int--結束值

set @start=0

set @end=25

set @step=1

然後我們動態的生成這個配置表

--生成配置表

create table #colunm ([id] int null,start int null,[end] int null,name nvarchar(50) null )

declare @row int = 1

while @start

begin

declare @now int 

set @now = @start + @step

insert into #colunm

select @row ,@start,@now,cast(@start as varchar(10))+'-'+cast(@now as varchar(10))+'%'               

set @start += @step

set @row += 1

end 

insert into #colunm

select @row+1 ,@end,'',cast(@end as nvarchar(10) )+'%以上'   

表給我說看不懂哦, #colunm介貨是臨時表,是sql基礎知識 不解釋。

儲存動態列的臨時表已經生成了,那麼下一步就是根據這個動態列表來獲取最終的結果集。

--動態行列轉換 生成最終資料集

declare @sql nvarchar(max) = 'select  你需要的列名 ' +char(10)--知道介個char(10)是幹撒的不?介個是表示換行的,列印出來的時候方便我們檢查sql語句是不是對滴

select @sql = @sql + ',' + ' sum( (case when a.step = '+cast(a.id as nvarchar(10) )+' then a.con else 0 end) )  '+a.name+' ' +char(10)

from #colunm a

order by a.id

select @sql = @sql  + ' from  #result a group by 列名 '

print @sql

exec(@sql)

這個其實大家很容易看出來,是求的個數。求其他的大家可以根據自己的需求來。

動態生成列

create procedure sp createtable tname varchar 100 colscript varchar 1000 colnum int coltype varchar 100 as begin declare s varchar 8000 i int set s cr...

easyui datagrid 動態生成列

最近有專案需求,顯示動態列,也就是根據配置的列,進行動態載入 專案原型為 實現效果 獲取列,用ajax去動態獲取 1 function getcols 14 15 16 17 18 19return columns 20 動態拼接組合成 array 並賦值就可以了 1 載入運費 2function ...

easylui datagrid 動態生成列

1 function load sdate function resp 12 column title i 我這裡預設用鍵值做title,一般可以根據鍵值自定義 13 column width 25 14 column field i 資料的鍵值就是field 15 column align cen...