1

我有一个来自医院的数据库。在一个表中有 1 个或多个交易号,几乎所有交易号都只包含 1 个医生 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 和费用总和?

我无法更改数据库,因为它已经有超过十万笔交易。

4

2 回答 2

1

使用子查询创建将 Trans_No 映射到 Doctor_ID 的“表”。然后用这个子查询加入你的真实表,为每个事务行创建一个 Doctor_ID。然后你可以做你的WHEREand GROUP 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
于 2012-11-24T12:09:05.500 回答
0

这为您提供了 Trans_No、Doctor_ID 和 Cost 的标准化版本:

select
  Trans_No,
  max(Doctor_ID) as Doctor_ID,
  max(case when PM="F" then Cost end) as Cost
from
  your_table
group by
  Trans_No

那么你必须按 Doctor_ID 分组:

Select Doctor_ID, sum(Cost)
From (
  select
    Trans_No,
    max(Doctor_ID) as Doctor_ID,
    max(case when PM="F" then Cost end) as Cost
  from
    your_table
  group by
    Trans_No) your_table
Group by Doctor_ID
于 2012-11-24T12:28:42.303 回答