2013-02-26 77 views
1

我有一個表,有幾個零件號碼列:PN1, PN2, PN3, otherDataMySQL,從一個表中突破多個字段到一列

我想創建一個有效的MySQL查詢,將零件號碼列摺疊到一個名爲PN的列中,該列將零件號碼鏈接到otherData。

此轉換對我們的業務邏輯是必需的。我有一個查詢下面的工作正常,但我們需要大幅度提高性能。

有沒有更好的方法來做到以下幾點?

SQL查詢其正確地轉換數據,但效率不高:

SELECT 'Pn', 'Mfg', 'TableId', 'SourceColumn', 'OtherData' 
SELECT PN1, Mfg, '26', 'PN1', OtherData FROM Table 
UNION ALL 
SELECT PN2, Mfg, '26', 'PN2', OtherData FROM Table 
UNION ALL 
SELECT PN3, Mfg, '26', 'PN3', OtherData FROM Table 
UNION ALL 
SELECT PN4, Mfg, '26', 'PN4', OtherData 
INTO OUTFILE 'XXX.dat' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM Table d; 

輸入表看起來如下表所示:

| PN1 | PN2 | PN3 | PN4 | MFG | TableId | OtherData | 
----------------------------------------------------------------------- 
| asdf | abde | 12354 | asdfc | 2 | 26  | 0.2456  | 
| nupo | 1354 | null | null | 2 | 26  | 1.53  | 
| ... | ... | ... | ... | ... | ...  | ...  | 
| ... | ... | ... | ... | ... | ...  | ...  | 
| ... | ... | ... | ... | ... | ...  | ...  | 

我想輸出.dat文件看起來像這樣:

"Pn", "Mfg", "TableId", "SourceColumn","OtherData" 
"asdf", 2,  26,   "PN1",   0.2456 
"abde", 2,  26,   "PN2",   0.2456 
"12354", 2,  26,   "PN3",   0.2456 
"asdfc", 2,  26,   "PN4",   0.2456 
"nupo", 2,  26,   "PN1",   1.53 
"1354", 2,  26,   "PN2",   1.53 
... 

請注意,PN1到PN4已摺疊到PN。

有沒有更快的方式在MySQL中進行這種轉換?

+0

您可以使用創建動態查詢的存儲過程來執行此操作。不過,我不確定如何寫這個。 – Barmar 2013-02-26 17:56:00

+0

你是什麼意思「group_concat in reverse」?顯示示例輸入和輸出數據來展示您的意思。而且,對於我們來說,真的還是一個謎 - 真的要做的事(你的問題似乎是解決問題的方法,但可能有更好的方法)。 – Bohemian 2013-02-26 18:28:45

+0

剛剛編輯的問題,使其(希望)更清晰 – StormeHawke 2013-02-26 20:09:55

回答

相關問題