【问题标题】:Sql - Convert rows to cloumsSql - 将行转换为列
【发布时间】:2016-03-02 07:44:30
【问题描述】:

我是 sql Pivot 的新手。我有一个名为“设备”的表格,其中包含这样的内容。

+------------------------------+------------------
| 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

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

【问题讨论】:

  • 有没有办法订购半重复记录?
  • 每个 device_id/serieal_no 总是两个 imei 值?
  • 并非总是如此。也只能有一个imei。 @jarlh
  • 您不能将其添加到您的示例数据中,并调整预期结果吗?
  • 有没有超过2个imei的可能性?还是最多 2 个imei?

标签: mysql sql pivot pivot-table


【解决方案1】:

如果每个 device_id/serieal_no 总是有两个 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

【讨论】:

  • 谢谢@jarlh。完美运行。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多