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 回答