2016-10-04 308 views
1

SQL Server管理工作室 -SQL如何将3条语句结果合并为一条结果

如何在while循环中合并?

PARENTID是迈向childID的

一个内部关系
WHILE EXISTS (SELECT ParentID FROM Table1) 
    BEGIN 
     SELECT * FROM FinalTable WHERE FinalTableID = (SELECT c.ChildID FROM Table1 as c WHERE c.ChildID = (SELECT d.ChildID FROM Table1 as d WHERE d.ChildID = @MyCounter)) 
     IF(SELECT e.ParentID FROM Table1 as e WHERE e.ChildID = @MyCounter) IS NULL 
     BREAK 
     ELSE 
     SET @MyCounter = (SELECT d.ParentID FROM Table1 as d WHERE d.ChildID = @MyCounter) 
     CONTINUE 
    END 

此代码目前导致多行集合包含不同的结果,是有可能的一切合并成一个完整的结果?

FinalTable 
------------------------------- 
|  ID Name Text ChildID 
| 1 1 Foo1 Bar1 1 
| 2 2 oof1 Bra1 1 
| 3 3 ofo1 Rab1 1 
-------------------------------- 

FinalTable 
-------------------- 
|  ID Row2 Row3 ChildID 
| 1 8 Foo2 Bar2 2 
| 2 9 oof2 Bra2 2 
| 3 10 ofo2 Rab2 2 
-------------------- 

FinalTable 
-------------------- 
|  ID Name Text ChildID 
| 1 14 Foo3 Bar3 3 
| 2 17 oof3 Bra3 3 
| 3 19 ofo3 Rab3 3 
-------------------- 

通缉的结果:

FinalTable 
-------------------- 
|  ID Name Text ChildID 
| 1 1 Foo1 Bar1 1 
| 2 2 oof1 Bra1 1 
| 3 3 ofo1 Rab1 1 
| 4 8 Foo2 Bar2 2 
| 5 9 oof2 Bra2 2 
| 6 10 ofo2 Rab2 2 
| 7 14 Foo3 Bar3 3 
| 8 17 oof3 Bra3 3 
| 9 19 ofo3 Rab3 3 
-------------------- 
+2

请标记您使用的DBMS – TheGameiswar

+0

您不需要'while'循环。只需使用联合和'row_number()'在整个结果中生成唯一编号 –

+0

@a_horse_with_no_name我很想知道如何在没有时间的情况下循环同一张表,您能否提供指导或解释? – Kapein

回答

3

您可以使用一个临时表,并追加到它

CREATE TABLE #FinalTable() -- should be same structure of FinalTable 
WHILE EXISTS (SELECT ParentID FROM Table1) 
    BEGIN 
     INSERT INTO #FinalTable 
     SELECT * FROM FinalTable WHERE FinalTableID = (SELECT c.ChildID FROM Table1 as c WHERE c.ChildID = (SELECT d.ChildID FROM Table1 as d WHERE d.ChildID = @MyCounter)) 
     IF(SELECT e.ParentID FROM Table1 as e WHERE e.ChildID = @MyCounter) IS NULL 
     BREAK 
     ELSE 
     SET @MyCounter = (SELECT d.ParentID FROM Table1 as d WHERE d.ChildID = @MyCounter) 
     CONTINUE 
    END 
+0

相同的结构我收集的字段? 例如:CREATE TABLE #FinalTable(int,string,string) – Kapein

+1

我想明白了,这使得SQL语句在之前(32 ms之前)变得更快了30ms 2,谢谢! – Kapein

+0

我选择使用 'DECLARE FinalTable TABLE(ID int,Name Varchar(50),DataTypeID int)' 并以'SELECT * FROM FinalTable'结束 – Kapein