2011-06-21 46 views
2

我有一段代碼運行在各種數據庫上。它只是運行一個可配置的SQL查詢,它返回一些行。從每一行中,我拉一些文本和一個數字來創建一個新的對象。我們最新的客戶端已經決定把所有的文字數字組合在數據庫中的單個行即sql查詢人爲創建行

text_1, num_1, text_2, num_2, text_3, num_3 

有一個聰明的辦法我可以查詢這個返回

text_1,num_1 
text_2,num_2 
text_3,num_3 

讓我不不得不爲這個客戶重新編碼部分。

編輯: (不同的數據庫意味着不同的RDBMS) (逗號分隔的表內的不同列)

+1

每行都是單個字符串,還是使用','來表示單獨的字段?另外,當你說各種數據庫時,你的意思是不同的RDBMS?或者只是不同的物理實例,但都使用相同的RDBMS? – MatBailie

+0

@Dems - 更新了問題以回答您的查詢 –

回答

5
SELECT 
    CASE row.id WHEN 1 THEN field1 
       WHEN 2 THEN field3 
        ELSE field5 
    END          AS new_field_1, 
    CASE row.id WHEN 1 THEN field2 
       WHEN 2 THEN field4 
        ELSE field6 
    END          AS new_field_2 
FROM 
    myTable 
CROSS JOIN 
    (SELECT 1 AS id UNION ALL SELECT 2 UNION ALL SELECT 3) AS row 

這應該適用於大多數,但仍然需要稍加修改(如添加「來自雙反」在工會的Oracle ...)

或者,只是UNION三個查詢一起...

SELECT field1, field2 FROM myTable 
UNION ALL 
SELECT field3, field4 FROM myTable 
UNION ALL 
SELECT field5, field6 FROM myTable 
+0

偉大的答案和謝謝。 –

1

您可以創建一個函數/ SP返回一個結果你需要的方式。

+0

它必須運行在不同的RDBMS系統上,因此需要使用非常通用的子集SQL –