2

少し前に、私はレポートを実装するタスクを与えられました。私が直面している問題は次のとおりです。私はテーブルを持っています:

name      value   type
------------------------
100 Kasa  | 50000 |  B
100 Kasa  | 30000 |  A
 80 Kasa  |  500  |  A
 80 Kasa  |  50   |  B
200 Hello | 3000  |  A
645 Bye   | 1234  |  B

私が達成したいのは、名前でグループ化し、タイプが同じ場合はを合計し、タイプが異なる場合は別のセルに書き込むことです。私は2種類しかありません。

結果を取得したい

name       valueB    valueA   
--------------------------
100 Kasa  | 50000 |  30000
 80 Kasa  |   0   |   550
200 Hello |   0   |   3000
645 Bye   | 1234  |    0

今のところ、私はそれらをphpでグループ化していますが、これはコードを混乱させます。そして今、誰かがmysqlでそれを行うのを手伝ってくれることを望んでいます。

4

2 に答える 2

2

期待される出力(結果)が間違っていると思います

NAME        VALUEB  VALUEA
--------------------------
100 Kasa    50000   30000
200 Hello   0       3000
645 Bye     1234    0
80 Kasa     50      500

SUMそのための関数を使用できます

ステートメントCASE付き:

SELECT name,
       SUM(CASE type WHEN 'B'THEN value ELSE 0 END) valueB,
       SUM(CASE type WHEN 'A' THEN value ELSE 0 END) valueA
FROM myTable
GROUP BY name;

またはIFステートメント付き:

SELECT name,
       SUM(IF (type = 'B' , value , 0 )) valueB,
       SUM(IF (type = 'A' , value , 0 )) valueA
FROM myTable
GROUP BY name;

このSQLFiddleを参照してください

期待される出力が次のようになっている場合(NULLではなく0

SELECT name,
       GROUP_CONCAT(CASE type WHEN 'B'THEN value ELSE NULL END) valueB,
       GROUP_CONCAT(CASE type WHEN 'A' THEN value ELSE NULL END) valueA
FROM myTable
GROUP BY name;

このSQLFiddleを参照してください

于 2012-09-15T06:55:43.567 に答える
0
SELECT name, SUM(IF(type = 'A', value, 0)) valueA, SUM(IF(type = 'B', value, 0)) valueB
FROM mytable
GROUP BY name
于 2012-09-15T06:48:30.217 に答える