关于表列更换为主轴的问题
问题是这样的:
表T1,字段有A,B,日期, 花费
A B 日期 花费
-----------------------------------------------
1 配件 2006-12-16 2
1 配件 2006-12-17 4
1 配件 2006-12-18 16
1 配件 2006-12-19 2
1 配件 2006-12-20 16
2 主件 2006-12-16 4
2 主件 2006-12-17 3
2 主件 2006-12-18 5
2 主件 2006-12-19 0
2 主件 2006-12-20 4
3 副件1 2006-12-16 4
3 副件1 2006-12-17 3
7 副件5 2006-12-16 5
7 副件5 2006-12-18 4
现在的要求是:
通过一个查询把日期添加到主轴,
字段有A,B,日期1,日期2,日期3... ,日期中存放的是花费.
A B 2006-12-16 2006-12-17 2006-12-18 总计
1 配件 2 4 16 22
2 主件 4 3 5 13
3 副件1 4 3 0 7
7 副件5 5 0 4 9现在不知道这个查询怎么写,多谢大家了!
问题是这样的:
表T1,字段有A,B,日期, 花费
A B 日期 花费
-----------------------------------------------
1 配件 2006-12-16 2
1 配件 2006-12-17 4
1 配件 2006-12-18 16
1 配件 2006-12-19 2
1 配件 2006-12-20 16
2 主件 2006-12-16 4
2 主件 2006-12-17 3
2 主件 2006-12-18 5
2 主件 2006-12-19 0
2 主件 2006-12-20 4
3 副件1 2006-12-16 4
3 副件1 2006-12-17 3
7 副件5 2006-12-16 5
7 副件5 2006-12-18 4
现在的要求是:
通过一个查询把日期添加到主轴,
字段有A,B,日期1,日期2,日期3... ,日期中存放的是花费.
A B 2006-12-16 2006-12-17 2006-12-18 总计
1 配件 2 4 16 22
2 主件 4 3 5 13
3 副件1 4 3 0 7
7 副件5 5 0 4 9现在不知道这个查询怎么写,多谢大家了!
set @sql = 'select a,b'
select @sql = @sql + ' , sum(case 日期 when ''' + 日期 + ''' then 花费 else 0 end) [' + 日期 + ']'
from (select distinct 日期 from tb) as a
set @sql = @sql + ' from tb group by a,b'
exec(@sql)
drop table tb
gocreate table tb(A int,B varchar(10),日期 varchar(10),花费 int)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-16' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-17' ,4)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-18' ,16)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-19' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-20' ,16)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-16' ,4)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-17' ,3)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-18' ,5)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-19' ,0)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-20' ,4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-16', 4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-17', 3)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-16', 5)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-18', 4)
godeclare @sql varchar(8000)
set @sql = 'select a,b'
select @sql = @sql + ' , sum(case 日期 when ''' + 日期 + ''' then 花费 else 0 end) [' + 日期 + ']'
from (select distinct 日期 from tb) as a
set @sql = @sql + ' from tb group by a,b order by a,b'
exec(@sql) drop table tb/*
a b 2006-12-16 2006-12-17 2006-12-18 2006-12-19 2006-12-20
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 配件 2 4 16 2 16
2 主件 4 3 5 0 4
3 副件1 4 3 0 0 0
7 副件5 5 0 4 0 0
*/
drop table tb
gocreate table tb(A int,B varchar(10),日期 datetime,花费 int)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-16' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-17' ,4)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-18' ,16)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-19' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-20' ,16)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-16' ,4)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-17' ,3)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-18' ,5)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-19' ,0)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-20' ,4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-16', 4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-17', 3)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-16', 5)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-18', 4)
godeclare @sql varchar(8000)
set @sql = 'select a,b'
select @sql = @sql + ' , sum(case 日期 when ''' + convert(varchar(10),日期,120) + ''' then 花费 else 0 end) [' + convert(varchar(10),日期,120) + ']'
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
set @sql = @sql + ' from tb group by a,b order by a,b'
exec(@sql) /*
a b 2006-12-16 2006-12-17 2006-12-18 2006-12-19 2006-12-20
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 配件 2 4 16 2 16
2 主件 4 3 5 0 4
3 副件1 4 3 0 0 0
7 副件5 5 0 4 0 0*/drop table tb
drop table tb
gocreate table tb(A int,B varchar(10),日期 datetime,花费 int)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-16' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-17' ,4)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-18' ,16)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-19' ,2)
insert into tb(A,B,日期,花费) values(1, '配件' ,'2006-12-20' ,16)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-16' ,4)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-17' ,3)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-18' ,5)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-19' ,0)
insert into tb(A,B,日期,花费) values(2, '主件' ,'2006-12-20' ,4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-16', 4)
insert into tb(A,B,日期,花费) values(3, '副件1', '2006-12-17', 3)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-16', 5)
insert into tb(A,B,日期,花费) values(7, '副件5', '2006-12-18', 4)
godeclare @sql varchar(8000)
set @sql = 'select a,b'
select @sql = @sql + ' , sum(case 日期 when ''' + convert(varchar(10),日期,120) + ''' then 花费 else 0 end) [' + convert(varchar(10),日期,120) + ']'
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
set @sql = @sql + ' ,sum(花费) 总计 from tb group by a,b order by a,b'
exec(@sql) drop table tb/*
a b 2006-12-16 2006-12-17 2006-12-18 2006-12-19 2006-12-20 总计
----------- ---------- ----------- ----------- ----------- ----------- ----------- -----------
1 配件 2 4 16 2 16 40
2 主件 4 3 5 0 4 16
3 副件1 4 3 0 0 0 7
7 副件5 5 0 4 0 0 9
*/
insert ta select 1, '配件', '2006-12-16', 2
insert ta select 1, '配件', '2006-12-17', 4
insert ta select 1, '配件', '2006-12-18', 16
insert ta select 1, '配件', '2006-12-19', 2
insert ta select 1, '配件', '2006-12-20', 16
insert ta select 2, '主件', '2006-12-16', 4
insert ta select 2, '主件', '2006-12-17', 3
insert ta select 2, '主件', '2006-12-18', 5
insert ta select 2, '主件', '2006-12-19', 0
insert ta select 2, '主件', '2006-12-20', 4
insert ta select 3, '副件1', '2006-12-16', 4
insert ta select 3, '副件1', '2006-12-17', 3
insert ta select 7, '副件5', '2006-12-16', 5
insert ta select 7, '副件5', '2006-12-18', 4declare @sql varchar(4000)
set @sql=''
select @sql=@sql+','+quotename(date)+'=sum(case convert(varchar(10),日期,120) when '+quotename(date,'''')
+' then [花费] else 0 end)'
from
(select distinct convert(varchar(10),日期,120) as date from ta)t
--print @sql
exec('select a,b'+@sql+' from ta group by a,b')a b 2006-12-16 2006-12-17 2006-12-18 2006-12-19 2006-12-20
----------- -------------------------------------------------- ----------- ----------- ----------- ----------- -----------
3 副件1 4 3 0 0 0
7 副件5 5 0 4 0 0
1 配件 2 4 16 2 16
2 主件 4 3 5 0 4(4 行受影响)