SQl 2008 合并表字段
问一下 大虾,通过多表查询得出一下结果
ID NAME1 NAME2
---------- ---------- ----------
1 aa x1
1 bb x1
1 cc x1
2 mm y1
2 vv y1
我想要的结果:
ID NAME1 NAME2
---------- ---------- ----------
1 aa,bb,cc x1
2 mm,vv y1
SQL sever 语句怎么实现
[解决办法]
这个要写一个自定义函数来实现,sql无法实现。
[解决办法]
SELECT id,STUFF((SELECT ','+name FROM Test WHERE id=T.id FOR XML PATH('')),1,1,'') AS 别名 FROM Test T GROUP BY T.id
[解决办法]
http://bbs.csdn.net/topics/70406802
[解决办法]
你也可以一次先全部读到DataTable中,然后用函数或linq处理
[解决办法]
WITH tb(ID, NAME1, NAME2)
AS
(
SELECT 1,'aa','x1'
UNION ALL
SELECT 1,'bb','x1'
UNION ALL
SELECT 1,'cc','x1'
UNION ALL
SELECT 2,'mm','y1'
UNION ALL
SELECT 2,'vv','y1'
)
SELECT id,
name1 = STUFF((SELECT DISTINCT ',' + name1 FROM tb a WHERE a.id = tb.id FOR XML PATH('')),1,1,''),
name2 = STUFF((SELECT DISTINCT ',' + name2 FROM tb a WHERE a.id = tb.id FOR XML PATH('')),1,1,'')
FROM tb
GROUP BY id;
[解决办法]
DECLARE Test_Cursor CURSOR FOR
SELECT ID,Name1,Name2 FROM Test1
DECLARE @ID INT
DECLARE @Name1 Nvarchar(50)
DECLARE @Name2 Nvarchar(50)
DECLARE @t TABLE(ID INT,Name1 Nvarchar(50),Name2 Nvarchar(50))--定义结果集表变量
OPEN Test_Cursor --打开游标
FETCH NEXT FROM Test_Cursor INTO @ID,@Name1,@Name2
DECLARE @tempID INT = 0
DECLARE @tempName1 varchar(50) =''
DECLARE @tempName2 varchar(50) =''
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@tempID = 0)
BEGIN
SET @tempID = @ID
SET @tempName1 = @Name1
SET @tempName2 = @Name2
END
ELSE IF(@tempID = @ID)
BEGIN
SET @tempID = @ID
SET @tempName1 = @tempName1+',' + @Name1
SET @tempName2 = @Name2
SELECT @tempName1
END
ELSE
BEGIN
INSERT INTO @t (ID,Name1,Name2)SELECT @tempID,@tempName1,@tempName2
SET @tempID = @ID
SET @tempName1 = @Name1
SET @tempName2 = @Name2
INSERT INTO @t (ID,Name1,Name2)SELECT @tempID,@tempName1,@tempName2
END
FETCH NEXT FROM Test_Cursor INTO @ID,@Name1,@Name2
END
CLOSE Test_Cursor
DEALLOCATE Test_Cursor
SELECT * FROM @t
这个是游标做的 技术不行 还是有一点差距 没时间帮你弄了 要有事去了。如果下次来看没解决我就继续看