首页 > 解决方案 > 连接包含公共列值的两行

问题描述

我有一个存储过程返回一个如下所示的表:

ID | Job | Freight | Postage |  Job  | Type
-------------------------------------------
1  | 100 |      0  |      0  |  5.00 |  J
2  | 101 |      0  |      0  |  8.00 |  J
3  | 101 |   2.00  |      0  |     0 |  F
4  | 102 |      0  |      0  |  4.00 |  J
5  | 102 |      0  |   3.00  |     0 |  P
6  | 103 |      0  |      0  |  7.00 |  J
7  | 104 |      0  |      0  |  9.00 |  J
8  | 105 |      0  |      0  |  6.00 |  J

我希望它像这样返回表格:

ID | Job | Freight | Postage |  Job  | Type
-------------------------------------------
1  | 100 |      0  |      0  |  5.00 |  J
2  | 101 |   2.00  |      0  |  8.00 |  J
4  | 102 |      0  |   3.00  |  4.00 |  J
6  | 103 |      0  |      0  |  7.00 |  J
7  | 104 |      0  |      0  |  9.00 |  J
8  | 105 |      0  |      0  |  6.00 |  J

预期的结果将连接具有匹配作业编号的行,并更改每个行的运费邮资值,以便它们出现在一行上。永远不会有一个Job的实例同时具有FreightPostage值,它将是一个或另一个或根本没有。

从我所看到的看来,我可能需要使用 PIVOT 运算符来实现这一点,但这似乎过于复杂。有没有办法可以使用 CASE 或 IF 表达式来实现这个结果?

我已经在使用 SUM 函数来获取FreightPostage的值。我不确定如何让这些值显示在Type J 行上。

SUM(CASE WHEN Transaction.Type = 'F' THEN Transaction.Price END) OVER (PARTITION BY TransactionLine.ID) AS Freight

标签: sqlsql-serverstored-procedures

解决方案


推荐阅读