注册 登录
编程论坛 SQL Server论坛

遇麻烦:SQL数据合并问题

yangjiecapab 发布于 2010-10-21 09:58, 410 次点击
现有以下案例:
create   table   table1(姓名   nvarchar(10),     小班   nvarchar(10),         四致界限   nvarchar(20),大班   nvarchar(20) )
insert   table1   select     '张三 ','1号 ','张三东南西北1号 ','ss'         
union   all   select     '张三 ','2号 ','张三东南西北2号 ',''
union   all   select     '李四 ','1号 ','李四东南西北1号 ','ss'     
union   all   select     '张三 ','3号 ','张三东南西北3号 ',''
union   all   select     '李四 ','2号 ','李四东南西北2号 ',''
union   all   select '李四','3号','李四东南西北2号 ','ss '
union   all   select '张三','3号','李四东南西北2号 ','ss'

create   function   test_f(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select   @s=isnull(@s+ ' ', ' ')+小班   from   table1   where   姓名=@Name
return   @s
end

go
create   function   test_f2(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select   @s=isnull(@s+ ' ', ' ')+四致界限   from   table1   where   姓名=@Name
return   @s
end
go
drop function test_f2
create   function   test_f3(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select   @s=isnull(@s+ ' ', ' ')+ 大班   from   table1   where   姓名=@Name
return   @s
end
go

select   distinct   姓名,[小班]=dbo.test_f(姓名),[四致界限]=dbo.test_f2(姓名),[大班]= dbo.test_f3(姓名)  from   table1
select * from table1

查询出来结果为:
[local]1[/local]

可是发现相同的列的内容也会一起加上去,我想把完全重复的列的内容只显示一条,如果为NUll的则把不为空的数据填进NUll的列里!

高手请帮帮忙啊!比较急。。
1 回复
#2
aei1352010-10-21 12:14
create   table   table1(姓名   nvarchar(10),     小班   nvarchar(10),         四致界限   nvarchar(20),大班   nvarchar(20) )
insert   table1   select     '张三 ','1号 ','张三东南西北1号 ','ss'         
union   all   select     '张三 ','2号 ','张三东南西北2号 ',''
union   all   select     '李四 ','1号 ','李四东南西北1号 ','ss'     
union   all   select     '张三 ','3号 ','张三东南西北3号 ',''
union   all   select     '李四 ','2号 ','李四东南西北2号 ',''
union   all   select '李四','3号','李四东南西北2号 ','ss '
union   all   select '张三','3号','李四东南西北2号 ','ss'

alter   function   test_f(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select  @s=isnull(@s+ ' ', ' ')+小班   from (select distinct 姓名,小班 from table1) x   where   姓名=@Name
return   @s
end

go
create   function   test_f2(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select   @s=isnull(@s+ ' ', ' ')+四致界限   from (select distinct 姓名,四致界限 from table1) x   where   姓名=@Name
return   @s
end
go

alter   function   test_f3(@Name   nvarchar(10))
returns   nvarchar(1000)
as
begin
declare   @s   nvarchar(1000)
select   @s=isnull(@s+ ' ', ' ')+ 大班   from  (select distinct 姓名,大班 from table1) x   where   姓名=@Name
return   @s
end
go


select   distinct   姓名,[小班]=dbo.test_f(姓名),[四致界限]=dbo.test_f2(姓名),[大班]= dbo.test_f3(姓名)  from   table1
select * from table1
1