sql 針對縱向轉橫向的模型

2021-09-30 15:00:36 字數 2763 閱讀 1886

sql-針對縱向轉橫向的模型 /*

* 針對縱向轉橫向的模型

* @vcolumns  

分組的列 (最後乙個字段後面一定不要加

,)* @vclause   查詢表的條件(沒有條件

='')

* @vorderby   查詢結果排序的字段 ''為預設排序

* @vtop    

取出的行數 ''為全部

*/@vcolumns nvarchar(1000),

@vclause nvarchar(4000),

@vorderby nvarchar(100),

@vtop nvarchar(50))as

declare @sql nvarchar(4000)

declare @xcolumns nvarchar(4000)

declare @vtable nvarchar(50)

declare @vcolumnname nvarchar(100)

declare @vsumcolname nvarchar(100)

declare @vnum nvarchar(50)

declare @vallnum nvarchar(50)

declare @vsumorcount nvarchar(50)

set @xcolumns = '' /*

* 需要賦值的引數

** @vtable   

真正查詢的表名

* @vcolumnname

縱向轉橫向的列名

* @vsumcolname

取合計值的列名

* @vnum    

數值的別名

* @vallnum  

每行合計的列名 (如果不要合計則

='')

* @vsumorcount sum或者

*/set @vtable = 'his_mid_tab'

set @vcolumnname = 'hsks'

set @vsumcolname = 'qty'

set @vnum = 'num'

set @vallnum = 'allnum'

set @vsumorcount = 'sum'

@xcolumns = @xcolumns

+ 'sum(case ' + @vcolumnname + ' when '+ char(39) + [a].[column] + char(39)+ ' then ' + @vnum + ' else 0 end) as '''

+ [a].[column] + ''', ' /*

* 需要比例加入此語句

* + '(' + 'cast(round(sum(case ' + @vcolumnname + ' when '+ char(39) + [a].[column] + char(39)+ ' then ' + @vnum + ' else 0 end)*100.00' + '/sum(' + @vnum + '),2) as decimal(10,2))) as ' + [a].[column] + '_i, '*/

/*** 要動態顯示列的sql語句

住院 outp_or_inp = '0' 門診

outp_or_inp = '1'

*/from (select distinct dept_name as [column] from his_mzkm_tab where outp_or_inp = '0') as a

set @xcolumns = substring(@xcolumns, 0, len(@xcolumns))

set @sql = 'select '

if(@vtop <> '')

set @sql = @sql + 'top ' + @vtop + ' '

set @sql = @sql + @vcolumns + ', ' + @xcolumns

if(@vallnum <> '')

set @sql = @sql + ', sum(' + @vnum + ') as ' + @vallnum

set @sql = @sql + ' from ('

+ 'select ' + @vcolumns + ', ' + @vcolumnname + ', ' + @vsumorcount + '(' + @vsumcolname + ') as ' + @vnum + ' from ' + @vtable

if(@vclause <> '')

set @sql = @sql + ' where ' + @vclause

set @sql = @sql + ' group by ' + @vcolumns + ', ' + @vcolumnname

set @sql = @sql + ') as casual_table group by ' + @vcolumns + ' '

if(@vorderby <> '')

set @sql = @sql + 'order by ' + @vorderby

print @sql

exec sp_executesql @sql with recompile /*

* sql

語句引號之內的為sql中的幾個引數分別為(分組的列,條件,排序,取出行數)

* exec model_his_mid 'kjkm','date = ''8''','kjkm desc',''*/

/** sql

語句* exec model_his_mid 'kjkm','','kjkm desc','15'*/

mysql橫向轉縱向 縱向轉橫向排列的方法

初始化資料 程式設計客棧 drop table if exists test 01 create table test 01 id int 0 not null,user varchar 255 character set utf8mb4 collate utf8mb4 0900 ai ci nul...

樹的橫向列印 縱向列印

水平列印樹,選擇右中左遍歷的原因。右樹在根節點的上面,左樹在根節點的下面,按照從上到下的順序列印就是右中左的遍歷方式。def printtree root,depth 0 s if not root return s sright printtree2 root.right,depth 1 prin...

sql server 縱向表橫向輸出的實現

有時候,我們經常需要通過縱向儲存的資料,在做報表的時候,橫向輸出顯示出來。最典型的例子 問卷系統中的儲存答案的表,儲存的資料類似於 儲存形式 c userid 使用者編號 c questionid 問題編號 c item 答案 11a12 b1 3c 1 4 d 21d22d 2 3a 2 4b 以...