2012-11-06 23 views
0

加入我有一個表T1,從而如何按列名

gsdv |nsdv |esdv 
------------------- 
228.90 |216.41|0.00 

和表T2,使得

ds     |nm 
-------------------------- 
'Non-Revenue Sales'|'ESDV' 
'Gross Sales'  |'GSDV' 
'Net Sales'  |'NSDV' 

如何獲得下表?

ds     |nm |val 
--------------------------------- 
'Non-Revenue Sales'|'ESDV'|0.00 
'Gross Sales'  |'GSDV'|228.90 
'Net Sales'  |'NSDV'|216.41 

我知道,我可以用下面的

SELECT ds,nm,esdv val FROM T1,T2 WHERE nm = 'esdv' 
UNION 
SELECT ds,nm,gsdv val FROM T1,T2 WHERE nm = 'gsdv' 
UNION 
SELECT ds,nm,nsdv val FROM T1,T2 WHERE nm = 'nsdv' 

做到這一點,但我正在尋找一個更通用/更好的解決方案。我使用的是Sybase,但如果您可以想辦法與其他DBMS一起完成此任務,請告訴我。 謝謝。

+2

請記住'UNION'比'UNION ALL'慢,因爲它試圖刪除重複項。如果你沒有重複,使用'UNION ALL' – Kermit

回答

1

你可以試一試CASE。這看起來像

SELECT ds,nm,(CASE WHEN nm = 'esdv' THEN esdv WHEN nm = 'gsdv' THEN gsdv WHEN nm = 'nsdv' THEN nsdv END) val FROM T1,T2