我有一个医院的数据库。在一个表中有一个或多个事务编号,几乎所有事务编号都只包含一个医生ID。该表尚未规范化。
数据如下:

Trans_No    |Doctor_ID  |Trans_Type                     |PM |Cost
10.853329   |           |ADMINISTRASI                   |   |0.00
10.853329   |10004      |JASA MEDIS                     |   |25000.00
10.853329   |           |OBAT RESEP FARMASI NO : 1077   |F  |2000.00
10.836033   |           |ADMINISTRASI                   |   |0.00
10.836033   |10001      |JASA MEDIS                     |   |25000.00
10.836033   |           |OBAT RESEP FARMASI NO : 3137   |F  |0.00
10.836032   |           |ADMINISTRASI                   |   |0.00
10.836032   |10001      |JASA MEDIS                     |   |25000.00
10.836032   |           |OBAT RESEP FARMASI NO : 3138   |F  |10000.00

如何从PM列值为F的那个医生处获取医生ID和成本之和?
我无法更改数据库,因为它已经有超过十万个事务。

最佳答案

使用子查询创建一个“表”,将Trans_No映射到Doctor_ID。然后将您的实际表与此子查询连接,以便为每个事务行都有一个Doctor_ID。然后你可以做你的WHEREGROUP BY

SELECT tdoc.Doctor_ID, SUM(Cost) FROM your_table
JOIN (
  SELECT Trans_No, Doctor_ID FROM your_table WHERE Doctor_ID <> ''
  GROUP BY Trans_No, Doctor_ID
) tdoc ON tdoc.Trans_No = your_table.Trans_No
WHERE PM = 'F'
GROUP BY tdoc.Doctor_ID

10-02 18:16