读书人

关于表列更换为主轴的有关问题续

发布时间: 2012-01-11 22:28:46 作者: rapoo

关于表列更换为主轴的问题续
关于表列更换为主轴的问题续
问题是这样的:
表T1,字段有A,B,日期, 花费, 次数


A B 日期 花费 次数
-----------------------------------------------
1 配件 2006-12-16 2 1
1 配件 2006-12-17 4 2
1 配件 2006-12-18 16 1
1 配件 2006-12-19 2 1
1 配件 2006-12-20 16 1
2 主件 2006-12-16 4 2
2 主件 2006-12-17 3 3
2 主件 2006-12-18 5 4
2 主件 2006-12-19 0 0
2 主件 2006-12-20 4 1
3 副件1 2006-12-16 4 1
3 副件1 2006-12-17 3 1
7 副件5 2006-12-16 5 1
7 副件5 2006-12-18 4 1


现在的要求是:
通过一个查询把日期添加到主轴,
字段有A,B,统计方式, 日期1,日期2,日期3... ,日期中存放的是花费.
A B 统计方式 2006-12-16 2006-12-17 2006-12-18 总计
-----------------------
1 配件 花费 2 4 16 22
次数 1 2 1 4
2 主件 花费 4 3 5 13
次数 2 3 4 9
3 副件1 花费 4 3 0 7
次数 1 1 0 2
7 副件5 花费 5 4 0 9
次数 1 1 0 2
现在不知道这个查询怎么写,多谢大家了!

[解决办法]
--如果日期是字符型
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = N 'Select A, B, N ' '花费 ' ' As 统计方式 ', @S2 = N ' Union All Select A, B, N ' '次数 ' ' '
Select @S1 = @S1 + N ', SUM(Case 日期 When ' ' ' + 日期 + N ' ' ' Then 花费 Else 0 End) As [ ' + 日期 + '] ',
@S2 = @S2 + N ', SUM(Case 日期 When ' ' ' + 日期 + N ' ' ' Then 次数 Else 0 End) As [ ' + 日期 + '] '
From T1 Group By 日期


Select @S1 = @S1 + N ',SUM(花费) As 总计 From T1 Group By A, B ', @S2 = @S2 + N ',SUM(次数) As 总计 From T1 Group By A, B Order By A, B, 统计方式 Desc '
Print @S1 + @S2
EXEC(@S1 + @S2)
[解决办法]
create table ta(A int,B varchar(50),日期 datetime, 花费 int,次数 int)
insert ta select 1, '配件 ', '2006-12-16 ', 2,1
insert ta select 1, '配件 ', '2006-12-17 ', 4,2
insert ta select 1, '配件 ', '2006-12-18 ', 16,1
insert ta select 1, '配件 ', '2006-12-19 ', 2,1
insert ta select 1, '配件 ', '2006-12-20 ', 16,1
insert ta select 2, '主件 ', '2006-12-16 ', 4,2
insert ta select 2, '主件 ', '2006-12-17 ', 3,3
insert ta select 2, '主件 ', '2006-12-18 ', 5,4
insert ta select 2, '主件 ', '2006-12-19 ', 0,0
insert ta select 2, '主件 ', '2006-12-20 ', 4,1
insert ta select 3, '副件1 ', '2006-12-16 ', 4,1
insert ta select 3, '副件1 ', '2006-12-17 ', 3,1
insert ta select 7, '副件5 ', '2006-12-16 ', 5,1
insert ta select 7, '副件5 ', '2006-12-18 ', 4,1


declare @sql varchar(4000),@sql2 varchar(4000)
select @sql= ' ',@sql2= ' '
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
set @sql= 'select a,b,[统计方式]= ' '花费 ' ' '+@sql+ ' from ta group by a,b '

select @sql2=@sql2+ ', '+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

set @sql2= ' union all select a,b,[统计方式]= ' '次数 ' ' '+@sql2+ ' from ta group by a,b order by a,b,统计方式 '

exec(@sql+@sql2)

a b 统计方式 2006-12-16 2006-12-17 2006-12-18 2006-12-19 2006-12-20
----------- -------------------------------------------------- ---- ----------- ----------- ----------- ----------- -----------
1 配件 次数 1 2 1 1 1
1 配件 花费 2 4 16 2 16
2 主件 次数 2 3 4 0 1
2 主件 花费 4 3 5 0 4
3 副件1 次数 1 1 0 0 0
3 副件1 花费 4 3 0 0 0
7 副件5 次数 1 0 1 0 0
7 副件5 花费 5 0 4 0 0

(8 行受影响)

读书人网 >SQL Server

热点推荐