|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在我们工作的过程中,经常能听到很多不使用MySQL的理由,虽然其中有一些是对MySQL的误解,不过同样也有一些是合情合理的。 良多人大概发明,不管是在sql2000,仍是在sql2005中,都没有供应字符串的聚合函数,以是,当我们在处置以下请求时,会对照贫苦,但在SQLServer2005中,这类情形失掉了改良,我们能够轻松地完成这项处置。
成绩形貌:
不管是在sql2000,仍是在sql2005中,
都没有供应字符串的聚合函数,以是,当
我们在处置以下请求时,会对照贫苦:
有表tb,以下:
id value
-----------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
必要失掉了局:
id values
-----------------
1 aa,bb
2 aaa,bbb,ccc
即,groupbyid,求value的和(字符串相加)</p> 1.旧的办理办法
创立处置函数
CREATEFUNCTIONdbo.f_str(@idint)
RETURNSvarchar(8000)
AS
BEGIN
DECLARE@rvarchar(8000)
SET@r=
SELECT@r=@r+,+value
FROMtb
WHEREid=@id
RETURNSTUFF(@r,1,1,)
END
GO
--挪用函数
SELECtid,values=dbo.f_str(id)
FROMtb
GROUPBYid</p> 2.新的办理办法
示例数据
DECLARE@tTABLE(idint,valuevarchar(10))
INSERT@tSELECT1,aa
UNIONALLSELECT1,bb
UNIONALLSELECT2,aaa
UNIONALLSELECT2,bbb
UNIONALLSELECT2,ccc
--查询处置
SELECT*
FROM(
SELECTDISTINCT
id
FROM@t
)A
OUTERAPPLY(
SELECT
[values]=STUFF(REPLACE(REPLACE(
(
SELECTvalueFROM@tN
WHEREid=A.id
FORXMLAUTO
),<Nvalue=",,),"/>,),1,1,)
)N/*--了局
id values
---------------------------
1 aa,bb
2 aaa,bbb,ccc
(2行受影响)
--*/</p> 注:兼并与分拆的CLR,sql2005的示例中有:
在安装sql2005的示例后,默许安装目次为drive:ProgramFilesMicrosoftSQLServer90SamplesEngineProgrammabilityCLRStringUtilities中。
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。 |
|