-2

再度改訂:

SELECT x.Imaging, x.Indication FROM medicalimaging x 
 WHERE MCGID = '1036' 
and x.Indication not in (
select Indication FROM invoicefields a join invoices b on a.InvoiceNumber = b.InvoiceNumber WHERE a.PatientID = '10120003' and x.MCGID = b.StudyID and x.Imaging = a.TypeOfExam
)
Order By Imaging ASC, Indication ASC

回答ありがとうございました。調査を行いました。これが私が思いついたものです。

SELECT x.Imaging, x.Indication
FROM medicalimaging x
WHERE MCGID =  'McG 1032'
AND x.Indication NOT 
IN (

SELECT Indication
FROM invoicefields a
JOIN invoices b ON a.InvoiceNumber = b.InvoiceNumber
WHERE a.PatientID =  '10120003'
AND x.MCGID = b.StudyID
)

すでに請求されているものを把握し、リストから除外しようとしています。これらは私のテーブル、いくつかのサンプルデータ、およびクエリ結果です。

Medical Imaging ( These are the fields to be used in the list)
id | MCGID | Imaging | Indication 
1    1032     Xray       Visit 1
2    1032     Xray       Visit 2
3    1032     Xray       Visit 3
4    1032     CT         Emergency
5    1045     Xray       Initial

invoice ( Generic Invoice Data)
InvoiceNumber | StudyID |     TypeInvoice       | void | 
     1            1032        Medical Imaging        0 
     2            1045        Medical Imaging        0
     3            1032        Medical Imaging        1
     4            1032        Medical Imaging        0 

Invoicefields ( The Rows of charges in the Invoice ) 
InvoiceNumber     |    PatientID   |    TypeofExam   | Indication 
1                   PT25        Xray            Visit 1   
1                   PT30        Xray            Visit 1   
2                   PT36        Xray            Initial
2                   PT25        Xray            Initial
4                   PT25        Xray            Visit 2   
4                   PT30        Xray            Visit 2   
4                   PT25        Xray            Visit 3   

After Query Results


Ex. 1 Provided  MCGID=1032  and PatientID=PT25.

Results:   CT , Emergency


Ex. 2 Provided  MCGID=1032  and PatientID=PT30.


Results:           Xray    ,    Visit 3         
                   CT       ,   Emergency

つまり、これは一般的な構造です。参考までに、MCGIDはStudyIDと同じであり、検査の種類はイメージングと同じです。もう1つの注意点は、MCGIDは一意であり、PatientIDはMCGIDにのみ一意であるということです。これは、PatientIDを別のMCGIDに再利用できることを意味します。クエリを実行するために、PatientIDとMCGIDを提供します。したがって、私の目標は、TypeofExamおよびIndicationの下の請求書フィールドにリストされていない潜在的なImagingおよびIndicationsのリストを作成することです。また、void = 1の場合、請求書番号も無視する必要があります。

編集 :

基本的なSQL関数を理解し、複数のテーブルからデータをプルする方法を理解しました。複数のテーブルからデータを相互参照する方法を理解していません。問題は、データを約3回相互参照する必要があることです。だから、これが私が今いるところです。

SELECT medicalimaging.Imaging,medicalimaging.Indication FROM medicalimaging WHERE MCGID='1032'

他のテーブルからデータを取得し、プルしようとしているデータと比較するように指示する方法がわかりません。

4

2 に答える 2

1

これはずさんな感じがしますが、うまくいくようです。SQLFiddleはこちら

set @Patient = 'PT25';
set @MCGID = 1032;
select distinct
  @Patient PatientID,
  m.id,
  m.MCGID,
  m.Imaging,
  m.Indication
from 
  MedicalImaging m
  inner join 
  (
    select
      i.StudyID,
      f.PatientID,
      f.TypeOfExam,
      f.Indication
    from 
      invoice i
      inner join InvoiceFields f 
        on i.InvoiceNumber = f.InvoiceNumber
    where 
      f.PatientID = @Patient
      and i.StudyID = @MCGID
  ) p
  on m.MCGID = p.StudyID
where not exists
  (
    select
      i.StudyID,
      f.PatientID,
      f.TypeOfExam,
      f.Indication
    from 
      invoice i
      inner join InvoiceFields f 
        on i.InvoiceNumber = f.InvoiceNumber
    where 
      f.PatientID = @Patient
      and i.StudyID = @MCGID
      and f.TypeOFExam = m.Imaging
      and f.Indication = m.Indication
  )
;
于 2012-07-21T23:51:45.087 に答える
1

最も簡単な解決策は、existを使用して、請求書を含むイメージングデータを検索し、それらを除外することです。

select *
 from MedicalImaging mi
 where mi.mcgid = 1032
   and not exists (select null
                     from Invoice i
                    inner join InvoiceFields f
                       on i.invoicenumber = f.invoicenumber
                    where i.studyid = mi.mcgid
                      and i.void = 0
                      and f.typeOfExam = mi.imaging
                      and f.Indication = mi.indication
                      and f.PatientID = 'PT30')

私はここで創造的でなければなりませんでした。InvoiceFields.Indication = MedicalImaging.Indication繰り返される試験を絞り込むことができるように追加しました。このスキーマの背後にある理由は私にはわかりません。おそらく、このクエリが機能するために提供するPatientIDをどのように知っているかを説明する、患者に関する非公開の表があります。

これがDEMO@SqlFiddleです。そこでスキーマを変更してより多くの情報を提供し、リンクを投稿して戻すことができます。

于 2012-07-21T23:52:08.593 に答える