2016-11-30 4 views
0

私は四半期ごとに実行していたクエリを持っています。クエリは正常に実行されていましたが、男女別にフィルタリングして結果のパターンを確認できるように、性別フィールドを追加するように求められました。残りの患者データに使用している人口統計表にはすでに性別の列が含まれているため、単にクエリに追加しただけですが、実行すると「無効な列名」エラーが表示されます理由は分かりません。サブクエリを使用しているときに「無効な列名」エラーが発生しました

患者ID、名前、訪問場所、現在の性別を表示する必要があるため、私は患者リストをフィルタリングするために必要な残りのデータに対してサブクエリを使用しています。これは私が持っているものです:私が述べたように

SELECT DISTINCT 
[MedHist: Patient ID] as [Patient ID], 
[Patient: First Last Name] as [Patient Name], 
[Patient: Gender] as [Gender], 
ServiceLocationID as [Service Location] 

FROM 
    (SELECT DISTINCT 
    mh.[MedHist: Patient ID], 
    d.[Patient: First Last Name], 
    d.[Patient: Date of Birth], 
    d.[Patient: Gender] as [Gender], 
    d.[Patient: Age], 
    a.Status, 
    mh.[MedHist: Procedure Code], 
    pm.Description, 
    v.ServiceLocationID 

    FROM MedicalHistory mh INNER JOIN Demographics d ON mh.[MedHist: Patient ID] = d.[Patient: Patient ID] 
     INNER JOIN Appointment a ON a.PatientID = d.[Patient: Patient ID] 
     JOIN Visit v ON v.PatientID = d.[Patient: Patient ID] 
     JOIN PatientMeds pm ON pm.PatientID = d.[Patient: Patient ID] 

    WHERE d.[Patient: Age] ...is in a certain range 
     AND a.Status ...is a certain thing 
     AND pm.Description ...involves a certain medication 
     AND some other stuff 

    ) Demographics 

、私は性別フィールドを追加する前にこのクエリは完全に走った、そして今、私は最初のSELECT文の[Patient: Gender]部分の下に赤い波線を持っているし、それはです無効な列名エラーが表示されます。なぜどんなアイデア?

+0

内部クエリは単独で機能しますか? 「患者:性別」の人口統計グループからの「選択数(1)、[患者:性別]」は2レコードを返しますか? – xQbert

+1

技術的には、システムは「男性」、「女性」、「その他」、「不明」を許可しているので、4レコードを返します。 – EJF

+0

これで、列名が正しいことが分かりました。外側のクエリのエイリアスを 'oDemographics'に変更すると、おそらく既存のテーブルと同じ名前にエイリアスが付いて問題が発生しています。 (内部クエリー自体は機能していましたか?) – xQbert

答えて

0

更新:私は問題を理解したため、私自身の質問に答えています。私のサブクエリで

、私は(このデータベース内のテーブルのように多くは、このような長いタイトルを持っているので、私は通常、それは私の列が不必要に広いと醜い作ることは、このような列の名前を変更)私のSELECT文でd.[Patient: Gender] as [Gender]を持っています。だから私はメインのクエリで同じ[Patient: Gender]フィールドを選択しようとしているとき、サブクエリで名前が変更されているので、システムはそれを見つけることができません。次のコードが機能します。

SELECT DISTINCT 
    [MedHist: Patient ID] as [Patient ID], 
    [Patient: First Last Name] as [Patient Name], 
    Gender, 
    ServiceLocationID as [Service Location] 

FROM 
    (SELECT DISTINCT 
    mh.[MedHist: Patient ID], 
    d.[Patient: First Last Name], 
    d.[Patient: Date of Birth], 
    d.[Patient: Gender] as [Gender], 
    d.[Patient: Age], 
    a.Status, 
    mh.[MedHist: Procedure Code], 
    .....and so on 
0

あなたはだと思います。列は人口統計表にありますが、そうではありません。

最も可能性が高い理由は(この場合)スペルミスです。私が推測しなければならないのであれば、「性別」の前後に名前にスペースがあります。列の実際の名前を見つけるため

一つの方法は、information_schema.columnsで見ることです:

select '|' + column_name + '|' 
from information_schema.columns 
where table_name = 'Demographics' and 
     lower(column_name) like '%gender%'; 
+0

ちょうどこれを試して - 私が使用しているものが正しい – EJF

0

名前場合は、選択中の列に名前を付ける必要があり、テーブルなどT1から、この(動の)テーブル名

withnに従って
SELECT DISTINCT 
    [t1: Patient ID] as [Patient ID], 
    [t1: First Last Name] as [Patient Name], 
    [t1: Gender] as [Gender], 
    [t1: ServiceLocationID as [Service Location] 

    FROM 
     (SELECT DISTINCT 
     mh.[MedHist: Patient ID], 
     d.[Patient: First Last Name], 
     d.[Patient: Date of Birth], 
     d.[Patient: Gender], 
     d.[Patient: Age], 
     a.Status, 
     mh.[MedHist: Procedure Code], 
     pm.Description, 
     v.ServiceLocationID 

     FROM MedicalHistory mh INNER JOIN Demographics d ON mh.[MedHist: Patient ID] = d.[Patient: Patient ID] 
      INNER JOIN Appointment a ON a.PatientID = d.[Patient: Patient ID] 
      JOIN Visit v ON v.PatientID = d.[Patient: Patient ID] 
      JOIN PatientMeds pm ON pm.PatientID = d.[Patient: Patient ID] 

     WHERE d.[Patient: Age] ...is in a certain range 
      AND a.Status ...is a certain thing 
      AND pm.Description ...involves a certain medication 
      AND some other stuff 

    ) t1 
関連する問題