【问题标题】:Translate select columns in a row to multiple rows将一行中的选定列转换为多行
【发布时间】:2018-01-26 01:11:45
【问题描述】:

我花了几个小时修补这个问题,但无济于事。我有一个数据集,其中包含我想将特定列子选择到不同数据集中的行。

我遇到的问题是将AT,BB,BO,ES,LK 转换为单个partner 列,同时按 FID 和时间分组。

我已经能够自己复制大部分数据集。 AT... 列最初提供为 0、1、5 或 10。我唯一好奇的数据是 1 和 5,并转换为列名。初始数据集由此查询生成:

select FID, `time`, 
if((`AT` != 0 and `AT` < 10), "AT", "") as `AT`,
if((`BB` != 0 and `BB` < 10), "BB", "") as `BB`,
if((`BO` != 0 and `BO` < 10), "BO", "") as `BO`,
if((`BT` != 0 and `BT` < 10), "BT", "") as `BT`,
if((`ES` != 0 and `ES` < 10), "ES", "") as `ES`
from f_data group by FID, `time`;

示例输入

`FID`  `time` `AT``BB``BO``ES``LK`
BT201   7:00   AT  BB      ES  LK  
BT201   7:15   AT  BB  BO      LK  
BT201   7:30           BO  ES  LK  
BT201   7:45   AT  BB  BO  ES  LK  
BT201   8:00   AT      BO  ES  LK  

期望的输出

`FID`  `time` `partner`
BT201   7:00   AT
BT201   7:00   BB
BT201   7:00   ES
BT201   7:00   LK
BT201   7:15   AT
BT201   7:15   BB
BT201   7:15   BO
BT201   7:15   LK

我已经能够使用 plyr 通过 R 生成此输出,但无法在纯 MySQL 中生成此输出。如果需要,mysql --version 输出如下:

Ver 14.14 Distrib 5.5.58, for debian-linux-gnu (x86_64) using readline 6.2

【问题讨论】:

  • 你能显示你的查询吗?
  • 嗨@Ibu,不幸的是,这些数据是在我无法查看或修改其结构的视图中提供的。
  • 为了使用mysql,您需要能够编写查询。
  • @Ibu 我将格式化我在最初问题中复制数据集的查询。

标签: mysql sql database performance


【解决方案1】:
select FID, `time`, `AT` as `partner`
from input_table
where `AT` = "AT"

union all

select FID, `time`, `BB` as `partner`
from input_table
where `BB` = "BB"

union all

select FID, `time`, `BO` as `partner`
from input_table
where `BO` = "BO"

union all

select FID, `time`, `ES` as `partner`
from input_table
where `ES` = "ES"

union all

select FID, `time`, `LK` as `partner`
from input_table
where `LK` = "LK"

order by FID, `time`, `partner`

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2017-12-25
    • 2017-12-01
    • 2016-01-27
    相关资源
    最近更新 更多