首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

一个高手才能做出的题!1

2012-03-16 
一个高手才能做出的题!!!高手进!!1表1结果表idnameidname1A1ABC1B2H2H3CD3CD1C请问这题怎么实现啊。让ID为1

一个高手才能做出的题!!!高手进!!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)

热点排行