sql - SQL Joined Tables - 每个“on”匹配字段的连接表上的多行合并为一行?
问题描述
我有两个要从中提取数据的表。这是我所拥有的最小娱乐:
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]
ETC?
这样,它为每个作业编号创建一行,每个相关的费用和金额在同一行上。我一直在阅读 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 ...)
以处理更多表达式。
推荐阅读
- magento-1.8 - catalogsearch_query 确实有一个 STRING 条目。为什么 STRING 上的前端搜索不会出现?
- android - android中的KeyAggrement不接受ECPrivatekey
- python - 通过 curl 将变量传递给 Flask 端点
- git - 在 git commit 期间固定光标位置
- apache-spark-mllib - 如何使用 Java 中的 Evaluators 使用 org.apache.spark 在 PMML 上评分?
- oauth - Google OAuth 验证,无法添加敏感/受限范围
- sql - 如何查询一个字段中的一些字符?
- c# - 在 Arfoundation 中销毁游戏对象不起作用
- python-2.7 - IndentationError:python 2.7 中的意外缩进
- php - 如何使用必需和可选参数制作 API | PHP