Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql-将行转换为CLOUM_Mysql_Sql_Pivot_Pivot Table - Fatal编程技术网

Mysql Sql-将行转换为CLOUM

Mysql Sql-将行转换为CLOUM,mysql,sql,pivot,pivot-table,Mysql,Sql,Pivot,Pivot Table,我不熟悉sql Pivot。我有一个名为“设备”的表格,内容如下 +------------------------------+------------------ | device_id | serial_number | imei | +------------------------------+------------------ | A1yLCM4xe9cn | PIE7JHgo8rLwG | 767523638130820 | | A1yLCM4xe9c

我不熟悉sql Pivot。我有一个名为“设备”的表格,内容如下

+------------------------------+------------------
| device_id    | serial_number | imei            |
+------------------------------+------------------
| A1yLCM4xe9cn | PIE7JHgo8rLwG | 767523638130820 |
| A1yLCM4xe9cn | PIE7JHgo8rLwG | 100509490452499 |
| OJndw9C5X5I4 | 8lZ0YkPHjv5qA | 893567359155395 |
| OJndw9C5X5I4 | 8lZ0YkPHjv5qA | 336707619575525 |
| RIaKTBPEFQlc | CYGKQLSluJIRq | 269331663151346 |
我正试图得到这样一个select查询

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

我能够得到硬编码的值。是否可以动态地将行转换为列?

如果每个设备\u id/serieal\u no始终有两个imei值:

select device_id, serial_number, min(imei) as imei1, max(imei) as imei2
from tablename
group by device_id, serial_number
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
如果每个设备id/序列号有一个或两个imei值:

select device_id, serial_number, min(imei) as imei1, max(imei) as imei2
from tablename
group by device_id, serial_number
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

按设备id、序列号从设备组中选择设备id、序列号、组连接(imei)作为imei

这不是一个精确的解决方案,但可能对您有所帮助。
其他解决方案可以是自联接,但不可能同时在两个字段上进行。

是否有某种方法可以对半重复记录进行排序?每个设备总是有两个imei值\u id/serieal\u no?不总是这样。也只能有一个imei@Jarlh你不能把它添加到你的样本数据中,并调整预期结果吗?有可能超过2 imei否?或者最多2个imei?谢谢@jarlh。工作完美。