【问题标题】:Separating data in a row to multiple columns将一行中的数据分成多列
【发布时间】:2019-02-14 23:42:12
【问题描述】:

我是 MySQL 的新手。我已经尝试使用选择和连接来过滤和组合来自不同表的数据。我正在努力解决的一件事是如何为一行输出多行。

这是我创建的一个示例,用于描述我正在尝试做的事情。一个人可以有 0 到 3 个电话号码。

ID     First  Last  Bus Phone    Home Phone   Mobile Phone

40550  Ed     Zo    555-145-7424 333-743-1233 123-456-7890
46476  Rui    Jun   234-567-8901 345-678-9012   
26480 Matt    Del                             222-333-4444

我想为该人拥有的每个电话号码创建 1 行输出。

ID      First   Last    PhoneType           Number
40550   Ed    Zo          B             555-145-7424
40550   Ed    Zo          H             333-743-1234
40550   Ed    Zo          M             123-456-7890
46476   Rui   Jun         B             234-567-8901
46476   Rui   Jun         H             345-678-9012
26480   Matt  Del         M             222-333-4444

我应该查看哪些 SQL 语句?任何指针将不胜感激。

谢谢!

MG

【问题讨论】:

  • 了解 PIVOT
  • "See about PIVOT" @Strawberry 是不是很不可靠。他想从列转到记录。 PIVOT 是从记录到列对吧?
  • @raymondnijland 只是检查你是否在关注
  • 您应该在 Google 上查看示例。在您遵循一些基本教程并学习了基础知识之后,当您有一些无法正常工作的代码时来这里。 StackOverflow 有一些相当严格的准则来说明可以在这里提出什么样的问题,否则它会破坏人们使用该网站的大部分价值和方式。

标签: mysql multirow


【解决方案1】:

在 MySQL 中,最简单的方法是union all:

select id, first, last, 'B' as phoneType, bus_phone
from t
where bus_phone is not null
union all
select id, first, last, 'h', home_phone
from t
where home_phone is not null
union all
select id, first, last, 'M', mobile_phone
from t
where mobile_phone is not null;

【讨论】:

  • 我发现我的数据没有空字段,因为我在报告中看到空白单元格。我修改了查询以选择 id, first, last, 'M', mobile_phone from t where not (phone_M is null or mobile_phone = '');那成功了。再次感谢戈登!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多