sql中pivot函數(行轉列),unpivot(列轉行)

1、create table DailyIncome(VendorId nvarchar(50), IncomeDay nvarchar(50), IncomeAmount int,FacName nvarchar(50))
2、插入數據
insert into DailyIncome values ('SPIKE', 'FRI', 100,'mixue')
insert into DailyIncome values ('SPIKE', 'MON', 300,'mixue')
insert into DailyIncome values ('FREDS', 'SUN', 400,'naike')
insert into DailyIncome values ('SPIKE', 'WED', 500,'naike')
insert into DailyIncome values ('SPIKE', 'TUE', 200,'naike')
insert into DailyIncome values ('JOHNS', 'WED', 900,'naike')
insert into DailyIncome values ('SPIKE', 'FRI', 100,'adi')
insert into DailyIncome values ('JOHNS', 'MON', 300,'adi')
insert into DailyIncome values ('SPIKE', 'SUN', 400,'adi')
insert into DailyIncome values ('JOHNS', 'FRI', 300,'adi')
insert into DailyIncome values ('FREDS', 'TUE', 500,'nong')
insert into DailyIncome values ('FREDS', 'TUE', 200,'nong')
insert into DailyIncome values ('SPIKE', 'MON', 900,'nong')
insert into DailyIncome values ('FREDS', 'FRI', 900,'nong')
insert into DailyIncome values ('FREDS', 'MON', 500,'nong')
insert into DailyIncome values ('JOHNS', 'SUN', 600,'renhe')
insert into DailyIncome values ('SPIKE', 'FRI', 300,'renhe')
insert into DailyIncome values ('SPIKE', 'WED', 500,'renhe')
insert into DailyIncome values ('SPIKE', 'FRI', 300,'renhe')
insert into DailyIncome values ('JOHNS', 'THU', 800,'renhe')
insert into DailyIncome values ('JOHNS', 'SAT', 800,'renhe')
insert into DailyIncome values ('SPIKE', 'TUE', 100,'renhe')
insert into DailyIncome values ('SPIKE', 'THU', 300,'bolaiya')
insert into DailyIncome values ('FREDS', 'WED', 500,'bolaiya')
insert into DailyIncome values ('SPIKE', 'SAT', 100,'bolaiya')
insert into DailyIncome values ('FREDS', 'SAT', 500,'bolaiya')
insert into DailyIncome values ('FREDS', 'THU', 800,'bolaiya')
insert into DailyIncome values ('JOHNS', 'TUE', 600,'bolaiya')
3、方式一:使用select sum case when then end as 方式實現行轉列
select VendorId ,
sum(case when IncomeDay='MoN' then IncomeAmount else 0 end) as MON,
sum(case when IncomeDay='TUE' then IncomeAmount else 0 end) as TUE,
sum(case when IncomeDay='WED' then IncomeAmount else 0 end) as WED,
sum(case when IncomeDay='THU' then IncomeAmount else 0 end) as THU,
sum(case when IncomeDay='FRI' then IncomeAmount else 0 end) as FRI,
sum(case when IncomeDay='SAT' then IncomeAmount else 0 end) as SAT,
sum(case when IncomeDay='SUN' then IncomeAmount else 0 end) as SUN
from DailyIncome group by VendorId
4、使用pivot函數實現行轉列
select * from (select VendorId,IncomeAmount,IncomeDay from DailyIncome) as #temp1
pivot
(
sum (IncomeAmount) ----第三步
for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步
) as AvgIncomePerDay
第一步:肯定是要明白數據源了,這裏是DailyIncome
第二步:要明白要想讓哪一列的值做新的列名字
第三步:要明白對於這新的列要求那些值
注:使用pivot函數,會吧沒選中的其他列作爲group by的分組條件
5、使用變量
DECLARE @sql11 VARCHAR(max)
SET @sql11='' --初始化變量@sql
SELECT @sql11=@sql11+',['+ IncomeDay +']' FROM DailyIncome
GROUP BY IncomeDay --變量多值賦值
SET @sql11=stuff(@sql11,1,1,'')--去掉首個','
--print @sql11
SET @sql11='select VendorId,'+@sql11+' from DailyIncome
pivot (max (IncomeAmount) for IncomeDay in ('+@sql11++')) as MaxIncomePerDay'
exec(@sql11)
來源:https://blog.csdn.net/qingwenc/article/details/108382885
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章