2013-02-20 214 views
1

有2個數據庫表,如下所示Table_1 & Table_2。 Table_1列索引與table_2的id值匹配。 Table_2的名稱值將作爲查詢結果的列標題。將SQL表頭值與另一個表列值匹配

Table_1 
______________________________________________ 
| date  |city_1 | city_2 | ... | city_100 | 
|-----------|-------|-------------------------| 
| 20.02.2013| 4 | 34 | ... | 222 | 
| 21.02.2013| 3 | 10 | ... | 33 | 
| ... | ... | ... | ... | ... | 
|_____________________________________________| 


    Table_2 
___________________ 
| id | name | 
|-------|---------| 
| 1 | newyork | 
| 2 | london | 
| ... | ... | 
| 100 | istanbul| 
|_________________| 

預期結果低於

__________________________________________________________ 
    | date  | newyork | london | ... | istanbul | 
    |-----------|------------|------------|-------|-----------| 
    | 20.02.2013|  4  |  34  | ... | 222 | 
    | 21.02.2013|  3  |  10  | ... |  33 | 
    | ...  | ...  | ...  | ... | ... | 
    |___________|____________|____________|_______|___________| 

什麼是SQL查詢來獲取引起上面?

感謝

回答

2

你可以使用一個解決方案是這樣的:

SET @sql = NULL; 

SELECT GROUP_CONCAT(COALESCE(CONCAT(COLUMN_NAME, ' as ', Table_2.Name), COLUMN_NAME)) 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
    LEFT JOIN Table_2 
    ON Table_2.ID = SUBSTRING_INDEX(COLUMN_NAME, '_', -1) 
WHERE table_name = 'Table_1' INTO @sql; 

SET @sql = CONCAT('SELECT ', @sql, ' FROM Table_1'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

看到它here。 此代碼將提取Table_1的所有列名稱,並嘗試將Table_2中的ID與列的名稱進行連接。如果有一場比賽,我有一個別名返回列的名稱,就像這樣:

city_1 AS newyour 

,並使用GROUP_CONCAT變量@sql將包含所有這樣的列:

date,city_1 as newyork,city_2 as london,city_100 as istanbul 

然後,我將'SELECT ' +列名與別名+ ' FROM Table_1'連接起來,然後執行結果查詢。

相關問題