首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

SQl 2008 合龙表字段

2013-08-01 
SQl 2008 合并表字段问一下 大虾,通过多表查询得出一下结果ID NAME1NAME2---------- ---------- ---------

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
[解决办法]

引用:
问一下 大虾,通过多表查询得出一下结果
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 语句怎么实现



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


这个是游标做的  技术不行 还是有一点差距 没时间帮你弄了 要有事去了。如果下次来看没解决我就继续看

热点排行