一个高手才能做出的题!!!高手进!!1
表1 结果表
id name id name
1 A 1 ABC
1 B 2 H
2 H 3 CD
3 CD
1 C
请问这题怎么实现啊。让ID为1的后面的name全部相加变成ABC
怎么做啊。
急啊!!!!
[解决办法]
create table #t
(
[id ] int,
[va] varchar(1)
)
insert into #t
select 1, 'a '
union
select 1, 'b '
union
select 1, 'c '
declare @vv varchar(1000)
set @vv= ' '
select @vv = @vv + va from #t where [id] = 1
select @vv
drop table #t
[解决办法]
id name
01 小张
01 小王
02 小王
02 小陈
请问怎样变成
id name
01 小张;小王
02 小王;小陈
--建立测试环境
Create Table TEST
(ID Varchar(10),
Name Nvarchar(10))
Insert TEST Values( '01 ', N '小张 ')
Insert TEST Values( '01 ', N '小王 ')
Insert TEST Values( '02 ', N '小王 ')
Insert TEST Values( '02 ', N '小陈 ')
GO
--建立函数
Create Function GetName(@ID Int)
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Set @S= ' '
Select @S=@S+ '; '+Name from TEST Where ID=@ID Order By Name
Return (Stuff(@S,1,1, ' '))
End
GO
--测试
Select ID,dbo.GetName(ID) As Name from TEST Group By ID
--删除测试环境
Drop Table TEST
Drop Function GetName
GO
--结果
/*
ID Name
01 小张;小王
02 小王;小陈
*/
------解决方案--------------------
删除指定长度的字符,并在指定的起点处插入另一组字符。
Transact-SQL 语法约定
语法
STUFF ( character_expression , start , length ,character_expression )
参数
character_expression
一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。
start
一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression长,则返回空字符串。start 可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比第一个 character_expression长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 bigint 类型。
备注
如果结果值大于返回类型支持的最大值,则产生错误。
返回类型
如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据。
示例
以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。
复制代码
SELECT STUFF( 'abcdef ', 2, 3, 'ijklmn ')
GO
下面是结果集:
---------
aijklmnef
(1 row(s) affected)