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

id | 何でも| 何でも1

5 | null | ヌル

表2

id | id col 1 | id col 2 | 料金| 支払い

5 | 2 | 3 | 17 | 0

5 | 2 | 3 | 0 | 17

現在の結果:

id | 何でも| 何でも1| idcol1 | idcol2 | 料金| 支払い

5 | null | null | 2 | 3 | 17 | 0

5 | null | null | 2 | 3 | 0 | 17

欲しいです:

id | 何でも| 何でも1| idcol1 | idcol2 | 料金| 支払い

5 | 2 | 3 | 17 | 17

問題は、SQL呼び出し中に内部結合を実行していることです。これは、上記で必要なことを実行するのではなく、一部の値に対してデカルト積を実行します。誰かがこれをどのように達成できるか考えていますか?

4

1 に答える 1

2

これにはgroupbyを使用できます。

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

これにより、同じID列を持つすべての行から最大料金と最大支払いが取得されます。料金または支払いのある行が複数ある場合は、MAX()よりもSUM()を使用することをお勧めします。

結合すると、これは次のようになります。

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 に答える