1

SQLクエリに取り組んでいます

以下は出力です:

PT_NO          PT_AGE         PT_SEX      DISEASE_CODE    PT_BILL_AMOUNT
--------     --------       --------     -----------     --------------   
1               50            M               52.01X         100.00
1               50            M               52.01X         100.00
1               50            M               52.01X         100.00
2               40            F               74.01          300.00
2               40            F               74.01          300.00
2               40            F               74.01          300.00

以下はテーブル構造です。

PATIENT(pt_no,pt_age,pt_sex,pt_bill_amount)
PATIENT_DISEASE(pt_no,disease_code)


SELECT 
  pt_no,pt_age,pt_sex
  ,patient_disease.disease_code
  ,patient.pt_bill_amount
from patient "patient"
    inner join patient_disease "patient_disease" 
    on patient.pt_no = patient_disease.pt_no

どういうわけか私は請求額を繰り返さない方法を探しています(100と300は一度だけ)、それで私が作成された上記のビューを合計すると、正しい請求額を次のように取得します

PT_NO          PT_AGE         PT_SEX      DISEASE_CODE    PT_BILL_AMOUNT
--------     --------       --------     -----------     --------------   
1               50            M               52.01X         100.00
1               50            M               52.01X         0.00
1               50            M               52.01X         0.00
2               40            F               74.01          300.00
2               40            F               74.01          0.0
2               40            F               74.01          0.0

同じ上での入力は役に立ちます!!!

ありがとう !!!

4

2 に答える 2

1

これらの行を空白にしたい場合は、次を使用できますrow_number()

select pt_no, pt_age, pt_sex
    ,disease_code
    ,case 
      when rn = 1 
      then pt_bill_amount
      else 0.00
    end as pt_bill_amount
from
(
  SELECT 
    p.pt_no, p.pt_age, p.pt_sex
    , pd.disease_code
    , p.pt_bill_amount
    , row_number() over(partition by p.pt_no, pd.disease_code order by p.pt_no, pd.disease_code) rn
  from patient p
  inner join patient_disease pd
      on p.pt_no = pd.pt_no
) x
order by pt_no, disease_code, rn
于 2012-09-20T22:05:08.730 に答える
0

ROW_NUMBER関数を使用してグループごとに 1 つの行を選択できます。case 関数を使用すると、その行の金額のみが表示されます。そのように:

SELECT pt_no,
       pt_age,
       pt_sex,
       patient_disease.disease_code,
       CASE
         WHEN ( ( Row_number()
                    OVER(
                      partition BY pt_no, pt_age, pt_sex,
                    patient_disease.disease_code
                      ORDER BY pt_no, pt_age, pt_sex,
                    patient_disease.disease_code) ) =
                1 ) THEN patient.pt_bill_amount
         ELSE 0
       END AS pt_bill_amount
FROM   patient "patient"
       INNER JOIN patient_disease "patient_disease"
               ON patient.pt_no = patient_disease.pt_no  
于 2012-09-20T22:07:57.963 に答える