3

これは私のテーブルの例です:

drug_id | route (enum) | count
------------------------------
1       | PO           | 2
1       | IV           | 4
1       | IV           | 6
2       | PO           | 1
2       | PO           | 5
2       | IV           | 2

これが私が情報を必要とする方法です。基本的にSUM(count)は、各「ルート」の列にあります。

drug_id | PO | IV 
-----------------
1       | 2  | 10
2       | 6  | 2

私は私が学ぼうとしていたピボットが必要だと思いますが、私は一生の間、うまくいく簡潔なクエリをつなぎ合わせることができません。

私は次のようなことを試しました:

SELECT drug_id, PO, IV 
FROM 
    (
        SELECT drug_id, SUM(count) as PO, '0' as IV FROM `core_reports_antiinfectives` WHERE route="PO"
        UNION
        SELECT drug_id, SUM(count) as IV, '0' as PO FROM `core_reports_antiinfectives` WHERE route="IV"
    ) aa

ただし、これにより0すべてIVの列が得られ、とにかく適切であるとは確信していません。列を「グループ化」しdrug_idてまとめる必要がありますが、これも行き詰まっています。

足りないものはありますか?それとも、それについて行くためのより良い方法はありますか?

ありがとう!

4

2 に答える 2

4

これを試して

SELECT drug_id,
        SUM(case route when 'po' then `count` else 0 end) totalPO,
        SUM(case route when 'iv' then `count` else 0 end) totalIV
FROM core_reports_antiinfectives
GROUP BY drug_id

SQLFiddleデモ

于 2012-09-10T09:01:15.147 に答える
2
SELECT   drug_id,
         SUM(IF(route='PO',count,NULL)) AS PO,
         SUM(IF(route='IV',count,NULL)) AS IV
FROM     core_reports_antiinfectives
GROUP BY drug_id

sqlfiddleでそれを参照してください。

于 2012-09-10T08:58:37.270 に答える