您的位置:首页 > 数据库

SQL多行变一列

2011-07-20 21:49 120 查看
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID('[TUSER]') AND OBJECTPROPERTY(id, 'IsUserTable') = 1 )
DROP TABLE TUSER
CREATE TABLE TUSER
(id INT IDENTITY(1, 1)NOT NULL ,
UserName VARCHAR(50) ,
Code VARCHAR(50) NULL
)

SET IDENTITY_INSERT TUSER ON
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User1', 'A' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User1', 'B' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User2', 'C' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User2', 'D' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User2', 'E' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User3', 'F' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User3', 'G' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User3', 'H' )
INSERT TUSER( id, UserName, code )VALUES ( 1, 'User3', 'I' )
SET IDENTITY_INSERT TUSER OFF

--按某一列出结果的
SELECT B.username ,LEFT(UserList, LEN(UserList) - 1) AS list
FROM ( SELECT username ,
( SELECT code + ',' FROM tuser WHERE username = A.username ORDER BY ID FOR XML PATH('')
) AS UserList
FROM Tuser A GROUP BY username
) B

--找符合条件的某一列数据
--法一
SELECT LEFT(userlist, LEN(userlist) - 1) list
FROM ( SELECT ( SELECT code + ',' FROM TUSER WHERE 1 = 1 ORDER BY ID FOR XML PATH('')
) AS userlist
) B
--法二
DECLARE @list VARCHAR(MAX)
SET @list = ''
SELECT @list = @list + code + ',' FROM tuser
SELECT LEFT(@list, LEN(@list) - 1) AS list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: