2012-07-20 70 views
0

我想在應該在SQL中處理的代碼中處理此問題。問題是我想拿這個SQL與特定匹配列合併行

ID COL 1 | ID COL 2 | CHARGE |付款

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

,並把它變成這個

ID COL 1 | ID COL 2 | CHARGE |付款

2 |  3 | 17 | 17 

table1的

ID |無論|無論1

5 | null | null

table2

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調用期間我正在做一個內部聯接,它爲一些值做了笛卡爾積,而不是做上面我想要的。有沒有人有一個想法如何完成?

+2

請!向我們展示你的SQL! – 2012-07-20 00:47:40

回答

2

您可以通過這個用組:

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 
+0

最大功能和分組,應該有這個想法。你是男人,非常感謝你! – bluefear 2012-07-20 01:10:32