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 要不可能出现顺势问题
不过..为什么要这样设数据库呢..又不直观