假設有這樣的乙個需求:
有乙個表中儲存了某個部門的各個員工的每一年的各類薪金,
記錄儲存格式如:
員工姓名 薪金數目 薪金種類 年份
現在要求根據員工的姓名進行查詢,查詢出某些員工各個年份的薪金總數,出來的結果要求
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 執行結果 表內容 執...