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と費用の合計を取得するにはどうすればよいですか?

データベースにはすでに 10 万件を超えるトランザクションがあるため、データベースを変更できません。

4

2 に答える 2

1

サブクエリを使用して、Trans_No を Doctor_ID にマッピングする「テーブル」を作成します。次に、実際のテーブルをこのサブクエリと結合して、すべてのトランザクション行に Doctor_ID を設定します。WHERE次に、とを行うことができます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 に答える