表a结构为
字段1 | 字段2
------------------
A01 001
A01 002
A01 003
A01 009
B01 001
B01 002
B01 089
...现请教用SQL达到以下数据要求:
字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6
A01 001 002 003 009
B01 001 002 089
...谢谢!
字段1 | 字段2
------------------
A01 001
A01 002
A01 003
A01 009
B01 001
B01 002
B01 089
...现请教用SQL达到以下数据要求:
字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6
A01 001 002 003 009
B01 001 002 089
...谢谢!
sql语句的select部分要生成。
如果楼主强行写成一句sql,估计会很麻烦。最终的sql类似如下:select 字段1,max(case when 字段2='001' then 字段2 end ) as 字段2,max(case when 字段2='002' then 字段2 end ) as 字段3,max(case when 字段2='003' then 字段2 end ) as 字段3,..........
from a
where 1;
相信到此,楼主应该已经会了吧。
以下是MS SQL的语句,如何转为MySQL4.0? 研究中...
假设有张学生成绩表(t)如下
Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94
create table #t
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into #t(Name , Subject , Result) values('张三','语文','73')
insert into #t(Name , Subject , Result) values('张三','数学','83')
insert into #t(Name , Subject , Result) values('张三','物理','93')
insert into #t(Name , Subject , Result) values('李四','语文','74')
insert into #t(Name , Subject , Result) values('李四','数学','83')
insert into #t(Name , Subject , Result) values('李四','物理','93')
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']'
from (select distinct Subject from #t) as a
set @sql = @sql + ' from #t group by name'
exec(@sql)
drop table #t
--结果
姓名 数学 物理 语文
---------- ----------- ----------- -----------
李四 83 93 74
张三 83 93 73
from a
where 1;
把前面的sql中max去掉就可以了
select 字段1,max(case when 字段2='001' then 字段2 end ) as 字段2,max(case when 字段2='002' then 字段2 end ) as 字段3,max(case when 字段2='003' then 字段2 end ) as 字段3,..........
from a
where 1 group by 字段1;
from t
where 1 group by Name
实际使用时,要注意转换标点符号。('语文' 两面的单引号可能不对)
本sql没有经过调试。
然后用 whalefish2001(whale) 方法 转换就可以