在工作中难免会遇到数据库中数据要进行拼接的问题,字符串拼接可以是用SQL的拼接也可以使用C#的拼接,本次说的是使用SQL进行拼接。
首先插入测试语句:
--测试语句,准备创建表的语句:如下 CREATE TABLE dbo.test3 ( id int IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, typeid nvarchar(50) NULL, typeName nvarchar(50) NULL ); CREATE UNIQUE CLUSTERED INDEX idx3_id ON dbo.test3(id); --插入测试数据 INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '一班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '二班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S1', '三班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S2', '一班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S2', '二班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '三班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '四班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '五班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S3', '六班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S4', '一班'); INSERT INTO dbo.test3(typeid,typeName) VALUES('S4', '二班');
查询结果如下:
比如,现在的需求是,我想知道每个阶段(S1为第一阶段)有哪些班级,上图肯定有点乱,如果能每一阶段显示一条数据就好了。
select b.typeid,left(b.list,LEN(b.list)-1) from (select typeid,(select typeName+' ,' from test3 where a.typeid=typeid--比对条件,如果缺少则每条都相同 FOR XML PATH('')) as list from test3 a group by typeid )b
执行结果如下:
至此,就看出,使用sql for xml path很简单就能拼接出想要的结果来,何乐而不为呢。