不看文字叙述了,就看我列出得结果那张2维表,
YearMonth 1A 1B 1C 2A 2B 2C 3A 3B 3C
--------------------------------------------------------------------------
200501 43.24 48.24 Null Null 24.12 Null Null Null Null
200502 26.12 55.24 Null Null 29.12 Null Null Null 30.12以第一行数据为列:
列[1A]=43.24 怎么来的:是表a中的第1行和第2行数据的sum(Number)
列[1B]=48.24 -------------------第3行和第5行-----------------
列[1C]=Null ----------因为在表a中,YearMonth='200501' and CodeA='C' and CodeB='1'
没有结果。所以为NUll
YearMonth 1A 1B 1C 2A 2B 2C 3A 3B 3C
--------------------------------------------------------------------------
200501 43.24 48.24 Null Null 24.12 Null Null Null Null
200502 26.12 55.24 Null Null 29.12 Null Null Null 30.12以第一行数据为列:
列[1A]=43.24 怎么来的:是表a中的第1行和第2行数据的sum(Number)
列[1B]=48.24 -------------------第3行和第5行-----------------
列[1C]=Null ----------因为在表a中,YearMonth='200501' and CodeA='C' and CodeB='1'
没有结果。所以为NUll
解决方案 »
- 如何删除“表”中重复的记录???
- 我要将xml转成数据库,在java中实现了xml数据的获取,遇到一个问题!!!
- 数据库问题 清高手进
- 怎么对两个数据库中的同名表进行属性的比较?各位高手帮帮我吧
- 很难的sql求解
- 对于字段,大家认为设默认值好不好呀?
- sql2005 ROW_NUMBER() 一张表很快,两张表查询狂慢,不知道sql语句哪出问题了
- 一个SQL语句怎么写,马上给分.
- master数据库中名称为大写的那几表,在.net中用SELECT语句怎么找不到?
- 求教:将库存表中重复的品种合并,不知能不能写个sql语句自动执行
- 为什么提示变量没声明呢(困难户求助)大神们来捧个场
- 两个表联结后取最大ID纪录的问题
还没看明白吗?
*************************
表a:如下
CodeA CodeB
---------------
1 A
2 B
1 B
2 A
3 A
3 C
********************************
希望得到的结果:如下
Code
----------
A1
A2
A3
B1
B2
B3
C1
C2
C3
**********************************
说明:就是将CodeA,CodeB两个子段先取出distinct,然后将2个子段进行组合。如在表a的[CodeB]字段中,数据C虽然只出现过一次,但[CodeA]字段总共有1,2,3种不同的数据,所以组合的结果也要有C1,C2,C3这样叙述不知道是否明白了,根据表a想得到这样的结果,怎么处理?
如例子所说,如果2C的数据也要用NULL列出来,那好像要用循环
期待高手...
--建测试环境
create table b(YearMonth char(6),Number numeric(10,2),CodeA char(1),CodeB char(1))insert a select '200501', 21.12, 'A', 1
insert a select '200501', 22.12, 'A', 1
insert a select '200501', 23.12, 'B', 1
insert a select '200501', 24.12, 'B', 2
insert a select '200501', 25.12, 'B', 1
insert a select '200502', 26.12, 'A', 1
insert a select '200502', 27.12, 'B', 1
insert a select '200502', 28.12, 'B', 1
insert a select '200502', 29.12, 'B', 2
insert a select '200502', 30.12, 'C', 3--执行查询
declare @sql varchar(6000)
set @sql = 'select YearMonth,'
select @sql = @sql +' ['+ CodeB+CodeA +']=sum(case CodeB+CodeA when '''+ CodeB+CodeA +''' then Number else NULL end),' from (select * from a union select distinct YearMonth,0 Number,CodeA,CodeB1 CodeB from (select a.YearMonth,a.CodeA,a.CodeB,b.YearMonth YearMonth1,b.CodeA CodeA1,b.CodeB CodeB1 from a,(select YearMonth,CodeA,CodeB from a) b) c ) d group by CodeB,CodeA order by CodeB
set @sql = left(@sql,len(@sql)-1) +' from a group by YearMonth '
exec(@sql)--结果
YearMonth 1A 1B 1C 2A 2B 2C 3A 3B 3C
--------- ------ ------- ------- ------- ------- ----- ----- ----- -------
200501 43.24 48.24 NULL NULL 24.12 NULL NULL NULL NULL
200502 26.12 55.24 NULL NULL 29.12 NULL NULL NULL 30.12
--建测试环境的表名应该是a
create table a(YearMonth char(6),Number numeric(10,2),CodeA char(1),CodeB char(1))
declare @sql varchar(6000)
set @sql = 'select YearMonth,'
select @sql = @sql +' ['+ CodeB+CodeA +']=sum(case CodeB+CodeA when '''+ CodeB+CodeA +''' then Number else NULL end),' from (select * from a union select distinct a.YearMonth,0 Number,a.CodeA,b.CodeB from a,a b) c group by CodeB,CodeA order by CodeB
set @sql = left(@sql,len(@sql)-1) +' from a group by YearMonth '
exec(@sql)