-
sqlserver一个动态交叉表的范例
社区问的人太多了,保存一个备用
--建立测试环境
set nocount on
create table test(model varchar(20),date int ,qty int)
insert into test select 'a','8','10'
insert into test select 'a','10','50'
insert into test select 'b','8','100'
insert into test select 'b','9','200'
insert into test select 'b','10','100'
insert into test select 'c','10','200'
insert into test select 'd','10','300'
insert into test select 'e','11','250'
insert into test select 'e','12','100'
insert into test select 'f','12','150'
go
--测试
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
declare @sql varchar(8000)
set @sql='select model,'
select @sql=@sql+'sum(case when date='''+cast(date as varchar(10))+''' then qty else 0 end)['+cast(date as varchar(10))+'],'
from (select distinct top 100 percent date
from test order by date)a
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
set @sql =left(@sql,len(@sql)-1)+' from test group by model'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
exec(@sql)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
--删除测试环境
drop table test
set nocount off
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
model 8 9 10 11 12
-------------------- ----------- ----------- ----------- ----------- -----------
a 10 0 50 0 0
b 100 200 100 0 0
c 0 0 200 0 0
d 0 0 300 0 0
e 0 0 0 250 100
f 0 0 0 0 150
*/
-
相关阅读:
P4665 [BalticOI 2015]Network 题解
NOIp2020游记
独立集(bubble) 题解
密码(substring) 题解
8.20被题虐
开通博客了!
CSP-S2021 记
「CSP-S 2020」函数调用(拓扑排序+DP)
OI生涯回忆录
[UOJ79]一般图最大匹配(带花树)
-
原文地址:https://www.cnblogs.com/cl1024cl/p/6204977.html
Copyright © 2020-2023
润新知