2014-01-24 41 views
0

我有表 TABLE_1:SQL查詢從一個表中插入的單層一行到多行的另一個表

PID DIV1 DES1 DIV2 DES2 DIV3 DES3 DIV4 DES4 DIV5 DES5 
1 D1 DS1 D2 DS2 D3 DS3 null null D5 null 

輸出

TABLE_2:

TID PID DIV DES 
001 1 D1 DS1 
002 1 D2 DS2 
003 1 D3 DS3 
004 1 D5 null 

我需要糾正的插入語句以從table_1插入到table_2。如果表格在DIV和DES上都有空值,那麼我不應該插入這些字段。

謝謝

+1

這是不可讀的。你可以重新格式化你的表格嗎? – Coderchu

回答

2

在SQL Server中,你可以使用

WITH a(PID, DIV, DES, NO) as (
    SELECT PID, DIV1, DES1, 1 FROM table_1 WHERE DIV1 IS NOT NULL OR DES1 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV2, DES2, 2 FROM table_1 WHERE DIV2 IS NOT NULL OR DES2 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV3, DES3, 3 FROM table_1 WHERE DIV3 IS NOT NULL OR DES3 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV4, DES4, 4 FROM table_1 WHERE DIV4 IS NOT NULL OR DES4 IS NOT NULL 
) 
INSERT INTO table_2(TID, PID, DIV, DES) 
SELECT ROW_NUMBER() OVER(order by PID, NO), PID, DIV, DES FROM a 

在MySQL中,你會改變這

INSERT INTO table_2(TID, PID, DIV, DES) 
SELECT @i := @i + 1, PID, DIV, DES 
    FROM (
    SELECT PID, DIV1 as DIV, DES1 as DES, 1 as NO FROM table_1 WHERE DIV1 IS NOT NULL OR DES1 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV2, DES2, 2 FROM table_1 WHERE DIV2 IS NOT NULL OR DES2 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV3, DES3, 3 FROM table_1 WHERE DIV3 IS NOT NULL OR DES3 IS NOT NULL 
    UNION ALL 
    SELECT PID, DIV4, DES4, 4 FROM table_1 WHERE DIV4 IS NOT NULL OR DES4 IS NOT NULL 
    ) AS a, 
    (select @i := 0) AS temp 
order by PID, NO 
+0

感謝您的回覆,我收到以下錯誤錯誤代碼:1064.您的SQL語法錯誤; (SELECT PID,DIV1,DES1,1 FROM table_1 WHERE'at line 1 \t 0.031 sec – Abhi

+0

)在附近使用正確的語法檢查與您的MySQL服務器版本相對應的手冊由於這是標記[sql-server-2008],我使用了語法,現在我添加了MYSQL語法。 – FrankPl

+0

非常感謝你的工作 – Abhi

相關問題