2016-10-04 313 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