求一超级难SQL语句
需求:有2个表,2个表由关键字可以关联。
根据表一中有几条记录,在表二中相应地增加多少列,表二的其他列不变。
注:表一中没有1、2、3、...的序列号
***************************************************************************
create table t (列0 int,列1 int,列2 varchar(10),列3 varchar(10))
insert into t values(101,1, 'A ', 'X ')
insert into t values(101,2, 'B ', 'Y ')
insert into t values(101,3, 'C ', 'Z ')
go
declare @sql varchar(8000)
set @sql = 'select 列0 '
select @sql = @sql + ' ,max(case 列1 when ' ' ' + cast(列1 as varchar) + ' ' ' then 列2 end) [列2_ ' + cast(列1 as varchar) + '] '
+ ' ,max(case 列1 when ' ' ' + cast(列1 as varchar) + ' ' ' then 列3 end) [列3_ ' + cast(列1 as varchar) + '] '
from (select distinct 列1 from t ) as a
set @sql = @sql + ' from t group by 列0 '
exec(@sql)
drop table t
/*
列0 列2_1 列3_1 列2_2 列3_2 列2_3 列3_3
----------- ---------- ---------- ---------- ---------- ---------- ----------
101 A X B Y C Z
*/
***************************************************************************
难为情啊,没有研究透!
原需求:存在2个表,其中
表一:
列1 列2 列3
101 A X
101 B Y
101 C Z
102 D O
103 E P
... .. ..
表二:
列1 列2 列3
101 甲 ..
102 乙 ..
103 丙 ..
您刚才的语句只用到了一个表
而没有使用那个关键字的关联
譬如:
select
*
from xxx a
left join xxx b on a.列1=b.列1
...
因为没有吃透语句,所以替换不了实际我期待的结果!!!
[解决办法]
表一中有多少条纪录就增加多少列?
不管字段是否重复?
字段名称怎么命名?
[解决办法]
create table A (列1 int,列2 varchar(10),列3 varchar(10))
insert into A values(101, 'A ', 'X ')
insert into A values(101, 'B ', 'Y ')
insert into A values(101, 'C ', 'Z ')
insert into A values(102, 'D ', 'O ')
insert into A values(103, 'E ', 'P ')
create table B (列1 int,列2 varchar(10))
insert into B values(101, '甲 ')
insert into B values(102, '乙 ')
insert into B values(103, '丙 ')
go
select px=(select count(1) from A where 列1=T.列1 and 列2 <T.列2)+1 , * INTO C from A T
declare @sql varchar(8000)
set @sql = 'select 列1 '
select @sql = @sql + ' ,max(case px when ' ' ' + cast(px as varchar) + ' ' ' then 列2 else ' ' ' 'end) [列2_ ' + cast(px as varchar) + '] '
+ ' ,max(case px when ' ' ' + cast(px as varchar) + ' ' ' then 列3 else ' ' ' 'end) [列3_ ' + cast(px as varchar) + '] '
from (select distinct px from (select C.* from C,B where C.列1 = B.列1) t ) as a
set @sql = @sql + ' from (select C.* from C,B where C.列1 = B.列1) t group by 列1 '
exec(@sql)
drop table A,B,C
/*
列1 列2_1 列3_1 列2_2 列3_2 列2_3 列3_3
----------- ---------- ---------- ---------- ---------- ---------- ----------
101 A X B Y C Z
102 D O
103 E P
*/