一般這種比較複雜一點都用乙個儲存過程來寫比較好。因為單一的檢視不能滿足我們的需求。
類似這種,有規律可循的列。如果按照原始的方法 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...