日期:2014-05-18  浏览次数:20351 次

2个表的查询问题,也许不难!
table1的内容:  
id;     data
1;     xx
2;     xxxxxxxxx
3;     xxxxxxxxxx
4;     xxxx
5;     xxxxxxxxxx
...

也就是说data列只能存储10个字符,如果大于10个字符,剩下的就要到table2里面去找了。table2其实是table1里data数据列的延续:

table2的内容:

id;     seg;     data;
3;       1;       aaa
5;       1;       bbbbbb
5;       2;       cc
...

比如上面的例子,id=3的这行在table2里面也出现了(id=3),而且seg=1,那么就是说id=3的这行的data列的内容应该是:   xxxxxxxxxxaaa

又比如id=5的这行在table2里面也出现了(id=5),而且seg=1,2   ,这就是说id=5的这行的data列的内容应该是:   xxxxxxxxxxbbbbbbcc


我想求一个SELECT语句,返回这2个表的内容,但是要合并data这列,也就是说我想查询的效果是这样的:

id;     data
1;     xx
2;     xxxxxxxxx
3;     xxxxxxxxxxaaa
4;     xxxx
5;     xxxxxxxxxxbbbbbbcc
...


不知道这种SELECT语句有没有可能写出来?

------解决方案--------------------
--SQL Server 2000下可以用多种方式处理:
--1、创建自定义函数
--2、用游标


--使用函数是最简单的方法,如下:


--创建测试环境
create table 表1(id int,data varchar(100))
insert into 表1
select 1, 'xx ' union all
select 2, 'xxxxxxxxx ' union all
select 3, 'xxxxxxxxxx ' union all
select 4, 'xxxx ' union all
select 5, 'xxxxxxxxxx '

create table 表2(id int,seg int,data varchar(100))
insert into 表2
select 3,1, 'aaa ' union all
select 5,1, 'bbbbbb ' union all
select 5,2, 'cc '


go

--写一个聚合函数:
create function dbo.fn_Merge(@id int)
returns varchar(8000)
as
begin
declare @result varchar(8000)
set @result= ' '
select @result=@result+b.data from 表1 as A inner join 表2 as B on a.id=B.id where B.id=@id
return stuff(@result,1,1, ' ')
end
go

-- 调用函数
select id, data + isnull(dbo.fn_Merge(id), ' ') as data from 表1


drop table 表1,表2
drop function fn_Merge
------解决方案--------------------
为什么要设计成这样,怕程序员没事做吗

------解决方案--------------------
哈哈
------解决方案--------------------
seg 加多个order by 要不可能出现顺势问题


不过..为什么要这样设数据库呢..又不直观