我试图在我的代码中处理这个问题,应该在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
id |不管什么whatever1
5 | null |空
表2
id | id col 1 | id col 2 |充电|付款
5 | 2 | 3 | 17 | 0
5 | 2 | 3 | 0 | 17
目前的结果:
id |不管什么whatever1 | idcol1 | idcol2 |充电|付款
5 | null | null | 2 | 3 | 17 | 0
5 | null | null | 2 | 3 | 0 | 17
想:
id |不管什么whatever1 | idcol1 | idcol2 |充电|付款
5 | 2 | 3 | 17 | 17
问题出在我的SQL调用期间我正在做一个内部联接,它为一些值做笛卡尔积,而不是做我上面想要的。有谁知道如何实现这一目标?
答案 0 :(得分: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