SELECT usertName,place from user WHERE placeId=123
上面这条sql语句的结果如下: usertName place
宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣 水泊梁山----------------我想实现下面的结果,请问,该如何写select语句呢?placeId place usertName123 水泊梁山 宋江
123 水泊梁山 卢俊义
123 水泊梁山 吴用
123 水泊梁山 公孙胜
123 水泊梁山 关胜
123 水泊梁山 林冲
123 水泊梁山 秦明
123 水泊梁山 呼延灼
123 水泊梁山 花荣
上面这条sql语句的结果如下: usertName place
宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣 水泊梁山----------------我想实现下面的结果,请问,该如何写select语句呢?placeId place usertName123 水泊梁山 宋江
123 水泊梁山 卢俊义
123 水泊梁山 吴用
123 水泊梁山 公孙胜
123 水泊梁山 关胜
123 水泊梁山 林冲
123 水泊梁山 秦明
123 水泊梁山 呼延灼
123 水泊梁山 花荣
wufeng4552(水族)
http://topic.csdn.net/u/20081218/09/90ea3187-3c38-496e-8fdf-0682b4760fa1.html
(
placeId int,
usertName nvarchar(100),
place nvarchar(10)
)
insert #temp
select 123, N'宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣', N'水泊梁山'
go
--SQL:
SELECT a.*, c.usertName FROM
(SELECT placeId, place from #temp) a
CROSS APPLY
(SELECT usertName = CONVERT(xml,'<root><v>' + REPLACE(usertName, ',', '</v><v>') + '</v></root>') FROM #temp where placeId = a.placeId and place = a.place) B
outer apply
(SELECT usertName = N.v.value('.', 'varchar(100)') FROM B.usertName.nodes('/root/v') N(v)) c
WHERE a.placeId=123
/*
placeId place usertName
123 水泊梁山 宋江
123 水泊梁山 卢俊义
123 水泊梁山 吴用
123 水泊梁山 公孙胜
123 水泊梁山 关胜
123 水泊梁山 林冲
123 水泊梁山 秦明
123 水泊梁山 呼延灼
123 水泊梁山 花荣
*/
CREATE TABLE #TEMP
(
PLACEID INT,
USERTNAME NVARCHAR(100),
PLACE NVARCHAR(10)
)
INSERT #TEMP
SELECT 123, N'宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣', N'水泊梁山'
GOSELECT '123' AS C1,A.PLACE,SUBSTRING(A.USERTNAME,B.NUMBER,CHARINDEX(',',A.USERTNAME+',',B.NUMBER) - B.NUMBER) PART
FROM #TEMP A,MASTER..SPT_VALUES B
WHERE B.[TYPE] = 'P' AND B.NUMBER BETWEEN 1 AND LEN(A.USERTNAME)
AND SUBSTRING(',' + A.USERTNAME,B.NUMBER,1) = ','DROP TABLE #TEMP/*
C1 PLACE PART
---- ---------- ----------------------------------------------------------------------------------------------------
123 水泊梁山 宋江
123 水泊梁山 卢俊义
123 水泊梁山 吴用
123 水泊梁山 公孙胜
123 水泊梁山 关胜
123 水泊梁山 林冲
123 水泊梁山 秦明
123 水泊梁山 呼延灼
123 水泊梁山 花荣(9 行受影响)
create table #T1(placeId nvarchar(5),usertName nvarchar(4000),place nvarchar(20))
insert #T1 select '123','宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣','水泊梁山' create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) --把字符串截開,生成一個單列的表
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
enddeclare @usertName as nvarchar(4000)
declare @placeId as nvarchar(5)
declare @place as nvarchar(20)
SELECT @placeId=placeId,@usertName=usertName,@place=place from #T1 WHERE placeId=123
select @placeId as placeId ,@place as place ,col as usertName from dbo.m_split(@usertName,',')