首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转置部分SQL结果以合并记录

转置部分SQL结果以合并记录
EN

Stack Overflow用户
提问于 2019-01-19 17:14:18
回答 1查看 27关注 0票数 0

我正在做一个项目,它变得有点复杂,超出了我的处理能力。我有一段内部连接到多个表的SQL。这些表之一返回每个人的通信装置(例如,电话号码、无线呼号、寻呼机)。

一旦我实现了这段代码,SQL (非常正确地)将为每个人返回多条记录,这取决于它们填写了哪些逗号字段。因此,对我自己的搜索将返回:

代码语言:javascript
复制
Name  |  COMM_VALUE    | COMM_RID
Nick  |  07123 456789  |   5
Nick  |  0965          |   6
Nick  |  328493        |   7

在哪里,我需要:

代码语言:javascript
复制
Name  |  Mobile        |   Radio    |  Pager
Nick  |  07123 456789  |   0965     |  328493
Bob   |  etc etc etc

这是更大的表的一部分,所以我的问题是如何将这些列添加到我现有的SQL中,我研究了嵌套、子查询和联合,但我已经很久没有使用SQL了,甚至我的基本进展都在测试我的能力。

我设想如下所示,但不确定实现这一点所需的关键字:

代码语言:javascript
复制
Select
  PRP.FIRSTNAME + ‘ ‘ + PRP.SURNAME AS FULLNAME,
  RDP.POSTNAME,
  RRP.REMARKS,
  */ NEW COLUMNS */
      (SELECT COMM_VALUE FROM PERREC_COMMS WHERE COMM_RID = ‘6’) AS RADIO

上面(编辑过的)代码确实产生了结果,但并不完全像我预期的那样:

代码语言:javascript
复制
Name  |  RADIO
Nick  |  0965
Nick  |  null
Nick  |  null

然后,对每个人重复上述操作,其他字段正确显示,尽管在每行上重复。

如何将这些结果合并到一行(排除‘null’结果)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-19 18:46:16

您想要旋转数据。一种方法是条件聚合。为此,我建议:

代码语言:javascript
复制
select name,
       group_concat(case when comm_rid = 5 then comm_value end) as what_5_means,
       group_concat(case when comm_rid = 6 then comm_value end) as radio,
       group_concat(case when comm_rid = 7 then comm_value end) as whateve_7_means
from . . .
group by name;

从问题中我不知道应该使用什么from子句。

它使用group_concat()而不是max(),以防有人使用同一类型的多种通信方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54265613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档