我正在做一个项目,它变得有点复杂,超出了我的处理能力。我有一段内部连接到多个表的SQL。这些表之一返回每个人的通信装置(例如,电话号码、无线呼号、寻呼机)。
一旦我实现了这段代码,SQL (非常正确地)将为每个人返回多条记录,这取决于它们填写了哪些逗号字段。因此,对我自己的搜索将返回:
Name | COMM_VALUE | COMM_RID
Nick | 07123 456789 | 5
Nick | 0965 | 6
Nick | 328493 | 7在哪里,我需要:
Name | Mobile | Radio | Pager
Nick | 07123 456789 | 0965 | 328493
Bob | etc etc etc这是更大的表的一部分,所以我的问题是如何将这些列添加到我现有的SQL中,我研究了嵌套、子查询和联合,但我已经很久没有使用SQL了,甚至我的基本进展都在测试我的能力。
我设想如下所示,但不确定实现这一点所需的关键字:
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上面(编辑过的)代码确实产生了结果,但并不完全像我预期的那样:
Name | RADIO
Nick | 0965
Nick | null
Nick | null然后,对每个人重复上述操作,其他字段正确显示,尽管在每行上重复。
如何将这些结果合并到一行(排除‘null’结果)?
发布于 2019-01-19 18:46:16
您想要旋转数据。一种方法是条件聚合。为此,我建议:
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(),以防有人使用同一类型的多种通信方式。
https://stackoverflow.com/questions/54265613
复制相似问题