`
webcode
  • 浏览: 5957452 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

sql列合并

 
阅读更多

表結構如下:

idvalue
-----------
1aa
1bb
2aaa
2bbb
2ccc

結果如下:
idvalues
-----------------
1aa,bb
2aaa,bbb,ccc
*/

createtabletb(idint,valuevarchar(10))
insertintotbvalues(1,'aa')
insertintotbvalues(1,'bb')
insertintotbvalues(2,'aaa')
insertintotbvalues(2,'bbb')
insertintotbvalues(2,'ccc')
go

------------------------------------------------------------
--
1.sql2000舊方法:利用函數
createfunctiondbo.f_str(@idint)
returnsvarchar(8000)
as
begin
declare@rvarchar(8000)
set@r=''
select@r=@r+','+valuefromtbwhereid=@id
returnSTUFF(@r,1,1,'')
end
go
selectid,value=dbo.f_str(id)fromtbgroupbyid

------------------------------------------------------------
--
2.sql2000舊方法:另一個函數
createfunctionf_hb(@idint)
returnsvarchar(8000)
as
begin
declare@strvarchar(8000)
set@str=''
select@str=@str+','+cast(valueasvarchar)fromtbwhereid=@id
set@str=right(@str,len(@str)-1)
return(@str)
end
go
selectdistinctid,dbo.f_hb(id)asvaluefromtb

------------------------------------------------------------
--
3.sql2005:outerapply
selectA.id,B.[newValues]from
(
selectdistinctidfromtb)A
outerapply
(
select[newValues]=stuff(replace(replace(
(
select[value]fromtbN
whereid=A.id
forxmlauto
),
'<Nvalue="',','),'"/>',''),1,1,'')
)B

/*
注:APPLY是在一个查询的FROM子句中指定的新的关系运算符。
它允许您对外部表的每一行调用表值函数,可选地使用外部表的列作为函数的参数。
APPLY运算符有两种形式:CROSSAPPLY和OUTERAPPLY。
如果表值函数为其返回一个空集合的话,前者不返回外部表的行,而后者则返回一个NULL值的行而不是函数的列。
*/

------------------------------------------------------------
--
4.sql2005:forxmlpath
selectid,[values]=stuff((select','+[value]fromtbtwhereid=tb.idforxmlpath('')),1,1,'')
fromtb

groupbyid


引用自:http://www.haogongju.net/art/782866


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics