【发布时间】:2021-12-18 05:20:49
【问题描述】:
我在 Oracle 数据库中有 2 个不同的数据源。这只是到 Oralce DB(不是 PL SQL)的 SQL 连接。
第一个来源是一个应用程序表,其中包含应用程序 ID 和大量属性 第二个来源是联系人表。每个联系人都有一个应用 ID (logical_name)、一个类型、一个联系人、一个电子邮件和一些其他属性。
我想将它们放在目标位置的应用程序表中
我在这里搜索并根据我学到的内容最终尝试将我的应用表加入这个子查询:
select
max(logical_name) logical_name,
MAX(CASE WHEN type='APPLICATION SUPPORT OWNER' THEN contact END) Application_Support_Owner,
MAX(CASE WHEN type='APPLICATION SUPPORT OWNER' THEN email END) App_Support_Owner_EMAIL,
MAX(CASE WHEN type='APPLICATION SUPPORT - PRIMARY' THEN contact END) Application_Support_Primary,
MAX(CASE WHEN type='APPLICATION SUPPORT - PRIMARY' THEN email END) App_Support_Primary_EMAIL,
MAX(CASE WHEN type='BUSINESS CONTACT - PRIMARY' THEN contact END) Business_Contact_Primary,
MAX(CASE WHEN type='BUSINESS CONTACT - PRIMARY' THEN email END) Business_Contact_Primary_EMAIL
from contact_table
group by logical_name
我在查看输出时发现,在某些情况下,特定类型的联系人不止一个(尽管名称像“主要”和“所有者”)。因为联系人是“Last, First”格式,电子邮件是 First.Last@company.com,所以 Max 功能是混合和匹配联系人和电子邮件。
我认为多个值的最佳答案就是从一个记录中获取联系人和电子邮件,然后将另一个丢弃。它更简单,我们只希望每个角色(即每种类型)都有一个联系人。
我有点 SQL 菜鸟。除了 Max() 或其他语法可以从同一记录中产生两个字段之外,我还可以使用其他函数吗?我只想要每个应用程序的一行数据,因此我的联接没有每个应用程序的多条记录。提前感谢您的帮助。
【问题讨论】:
-
这能回答你的问题吗? Oracle SQL pivot query 或其中任何一个:stackoverflow.com/…
-
@WilliamRobertson 问题的描述很复杂,有点难以理解(如果 OP 添加了样本数据和预期的输出,它可能会得到改进)但是 OP 已经成功地旋转了表格,但有多种可能每个枢轴组中的行,并且需要确保在条件聚合期间行在跨列对的枢轴中是相关的;您的所有链接都与该问题无关。
-
谢谢@MT0。就像我说的,我是新手,所以我不知道简洁的正确术语。下面的解决方案正是我想要的。