首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一超级难SQL语句,该如何处理

2012-01-23 
求一超级难SQL语句需求:有2个表,2个表由关键字可以关联。根据表一中有几条记录,在表二中相应地增加多少列,

求一超级难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
*/

热点排行
Bad Request.