当前位置: 首页 > 面试题库 >

SQL连接表-每个“上”匹配字段的连接表上有多行合并为一行?

常甫
2023-03-14
问题内容

我有两个要从中提取数据的表。这是我所拥有的最小的娱乐:

Select
 Jobs.Job_Number,
 Jobs.Total_Amount,
 Job_Charges.Charge_Code,
 Job_Charges.Charge_Amount
From
 DB.Jobs
Inner Join
 DB.Job_Charges
On
 Jobs.Job_Number = Job_Charges.Job_Number;

因此,发生的事情是我最终要为每个Job_Number的每个不同的Charge_Code和Charge_Amount获取一行。该行上的其他所有内容都相同。是否有可能使它返回更类似的内容:

Job_Number - Total_Amount - Charge_Code[1] - Charge_Amount[1] - Charge_Code[2] - Charge_Amount[2]

等等?

这样,它就为每个职位编号创建了一行,并且每个相关的费用和金额都在同一行上。我一直在阅读W3,但无法确切地说出这是否可行。有什么帮助,谢谢!


问题答案:

要在固定数量的列上旋转结果集,可以使用row_number()和条件聚合:

select
    job_number, 
    total_amount,
    max(case when rn = 1 then charge_code end) charge_code1,
    max(case when rn = 1 then charge_amount end) charge_amount1,
    max(case when rn = 2 then charge_code end) charge_code2,
    max(case when rn = 2 then charge_amount end) charge_amount2,
    max(case when rn = 3 then charge_code end) charge_code3,
    max(case when rn = 3 then charge_amount end) charge_amount3 
from (
    select
        j.job_number,
        j.total_amount,
        c.charge_code,
        c.charge_amount,
        row_number() over(partition by job_number, total_amount order by c.charge_code) rn
    from DB.Jobs j
    inner join DB.Job_Charges c on j.job_number = c.job_number
) t
group by job_number, total_amount

上面的查询最多可提供3个费用代码和金额等于工作编号(按工作代码排序)。您可以select使用更多max(case...)表达式来扩展子句,以处理更多表达式。



 类似资料:
  • 试图确定是否可以创建一个连接表的查询,表一比表二小,表二有多个匹配表一条目的引用,查询将输出一个连接,其中表一的长度保留,但您只需添加更多列。我不确定这是否有意义,所以这里是我想要的一个例子 更新!! 保持原来的查询并使用PHP处理结果,也获得了很好的性能。让我知道如果你需要我张贴我的代码。

  • 它重复显示每个房间类型的酒店名称匹配该酒店id,但我想显示所有房间类型的酒店名称一次。我怎样才能做到这一点? 谢谢。

  • 问题内容: 我有2张桌子。为了简化: 表1,用户: userId int,userName nvarchar(50) 表2消息: msgId int,msgFrom int,msgTo int … msg1和msg2都包含userId。现在,我想获取所有消息,但是我想要用户名而不是msgFrom。我知道该怎么办: 一切正常,花花公子。获取用户名而不是msgTo的方法相同。现在的问题是,如何在同一调

  • 问题内容: 我有以下数据库结构/层次结构: TABLE product_type : TABLE product : parent_id :是product_type ID TABLE treeNode : 它是一个树层次结构(根有n个子节点),层次结构的数量 未知 。 col的值为 “ CATEGORY” 或 “ GROUP” ,这意味着我有2棵树: Categories: Groups: TA

  • 问题内容: 我只知道有关SQL的最低要求,所以请把我当作一个完整的菜鸟! 我有一个表,其中有很多行,但是其中一些行可以通过id配对,我想合并这些行的返回数组。 作为按比例缩小的版本,想象一下我表的上方,我的目标是返回2个结果 基于ID相关并且c2的值为’on’ 我的尝试是从一些阅读中得到以下内容,但没有得到 任何帮助将不胜感激 编辑 我认为Id只需发布下面的语法就可以了,这要归功于下面的答案: 再

  • 我试图用SPARK SQL编写一个查询,执行三个表的联接。但是查询输出实际上是。它适用于单人餐桌。我的联接查询是正确的,因为我已经在oracle数据库中执行了它。我需要在这里附加什么更正?Spark版本是2.0.0。 我在一些网页上发现了下面的说明,但它仍然不起作用: