合并分拆的问题

linguojin11 2008-06-30 04:31:44
[Quote=引用 1 楼 roy_88 的回复:]
合并分拆

http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html
[/Quote]
if object_id('Tab') is not null
drop table Tab
Go
Create table Tab([Col1] int,[Col2] nvarchar(1))
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'

go
if object_id('F_Str') is not null
drop function F_Str
go
create function F_Str(@Col1 int)
returns nvarchar(100)
as
begin
declare @S nvarchar(100)
--select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1
select @S=@S+','+Col2 from Tab where Col1=@Col1 ------ 看这里(我自己做的修改)
return @S
end
go
Select Col1,Col2=dbo.F_Str(Col1) from Tab

go

我的问题是:
1. 为什么这样修改后结果都是为空呢,isnull(@S+',','')这个不就是只判断当 @S+','为空时返回空,那怎么会产生那种结果呢?

2. 函数里面有循环语句那为什么能将COL1相同的COL2值都相加呢?
菜鸟请高手帮下
...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
linguojin11 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liangCK 的回复:]
2
Create table Tab([Col1] int,[Col2] nvarchar(1))
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'
-------
因为你要求col1相同的..就连接起来..所以加条件..
[/Quote]
第2个问题问错了, 呵呵
我是想问:那里面没有循环语句(象WHILE之类的)关键字,那为什么能实现循环相加呢?
请帮我下
kldxdybb 2008-06-30
  • 打赏
  • 举报
回复
1.Null 参加运算后结果为Null 所以要转换成空字串'';
2.没想好怎么说,楼主自己体会下吧。
liangCK 2008-06-30
  • 打赏
  • 举报
回复
2
Create table Tab([Col1] int,[Col2] nvarchar(1))
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'
-------
因为你要求col1相同的..就连接起来..所以加条件..
chuifengde 2008-06-30
  • 打赏
  • 举报
回复
要初始化@s
set @s=''--没初始化的时候null+任何值都是null
select @S=@S+','+Col2 from Tab where Col1=@Col1
liangCK 2008-06-30
  • 打赏
  • 举报
回复
@S is null
null跟任何东西都是null

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧