2016-03-02 127 views
1

我是新增的sql Pivot。我有一個名爲「設備」的表格,內容如下。Sql - 將行轉換爲cloums

+------------------------------+------------------ 
| device_id | serial_number | imei   | 
+------------------------------+------------------ 
| A1yLCM4xe9cn | PIE7JHgo8rLwG | 767523638130820 | 
| A1yLCM4xe9cn | PIE7JHgo8rLwG | 100509490452499 | 
| OJndw9C5X5I4 | 8lZ0YkPHjv5qA | 893567359155395 | 
| OJndw9C5X5I4 | 8lZ0YkPHjv5qA | 336707619575525 | 
| RIaKTBPEFQlc | CYGKQLSluJIRq | 269331663151346 | 

我試圖得到這樣

+------------------------------+---------------------------------- 
| device_id | serial_number | imei1   | imei2   | 
+------------------------------+---------------------------------- 
| A1yLCM4xe9cn | PIE7JHgo8rLwG | 767523638130820 | 100509490452499 
| OJndw9C5X5I4 | 8lZ0YkPHjv5qA | 893567359155395 | 336707619575525 
| RIaKTBPEFQlc | CYGKQLSluJIRq | 269331663151346 | NULL 

我能得到硬編碼值的選擇查詢。是否可以將行動態轉換爲列?

+0

是否有某種方式來訂購半重複記錄? –

+1

每個device_id/serieal_no總是有兩個imei值? – jarlh

+0

並非總是如此。也只能有一個imei。 @jarlh – user1437251

回答

2

如果有總是每DEVICE_ID/serieal_no 2個IMEI值:

select device_id, serial_number, min(imei) as imei1, max(imei) as imei2 
from tablename 
group by device_id, serial_number 

如果每個DEVICE_ID/serieal_no一個或兩個IMEI值:

select device_id, serial_number, min(imei) as imei1, 
     case when count(*) > 1 then max(imei) end as imei2 
from tablename 
group by device_id, serial_number 
+0

謝謝@jarlh。完美的作品。 – user1437251

1

select device_id,serial_number,GROUP_CONCAT(imei) as imeis from devices group by device_id,serial_number;

這是不是一個確切的解決方案,但可以幫助你 其他解決方案可以是自加入,但不能同時在兩個區域中進行。