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 以...