學習使用PIVOT

2021-04-20 03:24:22 字數 1999 閱讀 4985

假設有這樣的乙個需求:

有乙個表中儲存了某個部門的各個員工的每一年的各類薪金,

記錄儲存格式如:

員工姓名 薪金數目 薪金種類 年份

現在要求根據員工的姓名進行查詢,查詢出某些員工各個年份的薪金總數,出來的結果要求

columnname:  年份 員工1姓名 員工2姓名 ...

columnvalue: 年份 薪金總數 薪金總數

這個時候使用pivot來進行將行轉換了列,操作就變得很方便,而由於pivot是靜態的列,所以要使其起到動態的效果,只有用sql拼接的方法實現,如

-- test data

if object_id('tempdb..#t_money') is not null

begin

drop table #t_money

print 'drop complate.'

endcreate table #t_money

([id]            int             null,

[name]          nvarchar(256)   null,

[money]         money           null,

[type]          nvarchar(128)   null,

[year]          int             null

);insert into #t_money values(1,n'小斌',15000,n'月薪',2007);

insert into #t_money values(2,n'小斌',5000,n'獎金',2007);

insert into #t_money values(3,n'小斌',20000,n'月薪',2008);

insert into #t_money values(4,n'小斌',10000,n'獎金',2008);

insert into #t_money values(5,n'小珍',5000,n'月薪',2007);

insert into #t_money values(6,n'小珍',5000,n'獎金',2007);

insert into #t_money values(7,n'小珍',10000,n'月薪',2008);

insert into #t_money values(8,n'小珍',5000,n'獎金',2008);

-- unite sql

declare @names as nvarchar(2048);

with t_names as

(select distinct

[name]

from

#t_money

)select

@names = isnull(@names + n',[', '[' ) 

+ cast(name as nvarchar(256))

+ ']'

from

t_names

where

name like n'%斌%';

print @names;

declare @sql nvarchar(max);

set @sql = n'

select 

* from 

(select 

[name]

,[money]

,[year]

from

#t_money

) as tmp_piv

pivot

(sum(money)

for [name] in (' + @names + ')

) as tmp_money

order by 

year';

print @sql;

exec sp_executesql @sql;

結果如:

sql 行轉列使用pivot

select from select 商品名稱,銷售數量,月份 from tb helenzhou as t1 被行轉列的字段先在這裡列出來 pivot sum 銷售數量 for 月份 in 1 2 as t2 goup by 除了銷售數量和月份之外的的被上面列出來的其他字段 privot sum ...

Pandas中pivot的使用

pivot函式用於從給定的表中建立出新的派生表,pivot有三個引數 索引 列和值。具體如下 def pivot index,columns,values produce pivot table based on 3 columns of this dataframe.uses unique val...

PIVOT 和 UNPIVOT例項使用

表的內容 1 select subject 張三 李四 from 2 select subject name,val from pivot 3 as p1 4 pivot max val for name in 張三 李四 as p2 5 order by p2.subject 執行結果 表內容 執...