0

我试图在我的代码中处理这个应该在 SQL 中处理的问题。问题是我想拿这个

ID COL 1 | ID COL 2 | 收费 | 支付

 2    |       3    |    17    |      0
 2    |       3    |    0     |      17

把它变成这个

ID COL 1 | ID COL 2 | 收费 | 支付

 2    |       3    |    17    |    17

表格1

编号 | 随便| 随便1

5 | 空 | 无效的

表2

编号 | 编号 1 | 编号 2 | 收费 | 支付

5 | 2 | 3 | 17 | 0

5 | 2 | 3 | 0 | 17

当前结果:

编号 | 随便| 随便1 | idcol1 | idcol2 | 收费 | 支付

5 | 空 | 空 | 2 | 3 | 17 | 0

5 | 空 | 空 | 2 | 3 | 0 | 17

想:

编号 | 随便| 随便1 | idcol1 | idcol2 | 收费 | 支付

5 | 2 | 3 | 17 | 17

问题是在我的 sql 调用期间,我正在做一个内部连接,它为一些值做一个笛卡尔积,而不是做我上面想要的。有谁知道如何做到这一点?

4

1 回答 1

2

您可以为此使用 group by:

select IDCOL1, IDCOL2, max(CHARGE) as charge, max(PAYMENT) as payment
from table t
group by idcol1, idcol2

这将从具有相同 id 列的所有行中获取最高费用和最高付款。如果您有不止一行的费用或付款,您可能更喜欢 SUM() 而不是 MAX()。

有了连接,这看起来像:

select t1.id, t1.whatever, t1.whatever, t2.IDCOL1, t2.IDCOL2,
       max(CHARGE) as charge, max(PAYMENT) as payment
from table1 t1 join
     table2 t2
     on t1.id = t2.id
group by t1.id, t1.whatever, t1.whatever, t2.IDCOL1, t2.IDCOL2
于 2012-07-20T00:55:36.043 回答