2013-02-04 76 views
-1

我在執行查詢時遇到以下錯誤消息。有人建議我檢查我的子查詢中的別名。我做了,他們似乎排隊。子查詢錯誤消息

你們能提供一些見解嗎?謝謝。

在''''附近預期條件的上下文中指定的非布爾類型的表達式。

Select CLINIC_ID,SUMMARY_CATGRY,ENTRY_TYPE, 
SUM(case when EntryMonth = 1 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jan12], 
SUM(case when EntryMonth = 2 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Feb12], 
SUM(case when EntryMonth = 3 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Mar12], 
SUM(case when EntryMonth = 4 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Apr12], 
SUM(case when EntryMonth = 5 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [May12], 
SUM(case when EntryMonth = 6 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jun12], 
SUM(case when EntryMonth = 7 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jul12], 
SUM(case when EntryMonth = 8 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Aug12], 
SUM(case when EntryMonth = 9 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Sep12], 
SUM(case when EntryMonth = 10 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Oct12], 
SUM(case when EntryMonth = 11 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Nov12], 
SUM(case when EntryMonth = 12 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Dec12], 
SUM(case when EntryYear = 2012 then [sumofentry_amount] else 0 end) [2012YTD], 
SUM(case when EntryYear = 2011 then [sumofentry_amount] else 0 end) [2011YTD] 
From 
(
    SELECT [Non_Recurring_Clinic_Step1].CLINIC_ID, 
     dbo_HR_FINAN_CLASS.SUMMARY_CATGRY, 
     [TABLE_LAYOUT].ENTRY_TYPE, 
     datepart(month,[entry_date]) EntryMonth, 
     datepart(year,[entry_date]) EntryYear, 
     [sumofentry_amount] 

FROM [TABLE_LAYOUT] 
Inner Join 

(
SELECT [GROUPING_OF_CLINIC_ID].CLINIC_ID, OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER, [GROUPING_OF_CLINIC_ID].REGISTRATION_CD, OUTPAT_REGISTER.PRIMARY_FINAN, Replace(CONVERT(VARCHAR(10),OUTPAT_ACCT_REC.ENTRY_DATE,101), '/', '') AS ENTRY_DATE, SUM(ENTRY_AMOUNT) AS ENTRY_AMOUNT 

FROM 
OUTPAT_REGISTER 
Left JOIN 
OUTPAT_BILL_REF 
ON(OUTPAT_REGISTER.PATIENT_NUMBER = OUTPAT_BILL_REF.PATIENT_NUMBER) 
AND(OUTPAT_REGISTER.REGISTRATION_CD = OUTPAT_BILL_REF.REGISTRATION_CD) 

Left JOIN 
OUTPAT_ACCT_REC 
ON(OUTPAT_BILL_REF.PATIENT_NUMBER = OUTPAT_ACCT_REC.PATIENT_NUMBER) 
AND(OUTPAT_BILL_REF.BILL_REFERENCE = OUTPAT_ACCT_REC.REFERENCE_NUM) 

Left JOIN 
    (
SELECT CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD 
FROM OP_VISIT_HISTRY 
GROUP BY CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD 
--ORDER BY CLINIC_ID 
)AS [GROUPING_OF_CLINIC_ID] 

ON(OUTPAT_REGISTER.PATIENT_NUMBER = [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER) 
AND(OUTPAT_REGISTER.REGISTRATION_CD =[GROUPING_OF_CLINIC_ID].REGISTRATION_CD) 

GROUP BY [GROUPING_OF_CLINIC_ID].CLINIC_ID,OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER,[GROUPING_OF_CLINIC_ID].REGISTRATION_CD, 
OUTPAT_ACCT_REC.ENTRY_DATE,OUTPAT_REGISTER.PRIMARY_FINAN 

HAVING OUTPAT_ACCT_REC.ENTRY_DATE >'12/31/2010' 
)AS [Non_Recurring_Clinic_Step1] 

On([TABLE_LAYOUT].ENTRY_CLASS = [Non_Recurring_Clinic_Step1].CHARGE_CLASS) 

Inner Join 
OUTPAT_REGISTER 

On([Non_Recurring_Clinic_Step1].PATIENT_NUMBER = OUTPAT_REGISTER.PATIENT_NUMBER) 
And([Non_Recurring_Clinic_Step1].REGISTRATION_CD = OUTPAT_REGISTER.REGISTRATION_CD) 

Inner Join 
OUTPAT_AREA_CDS 
On(OUTPAT_REGISTER.REGISTER_AREA = OUTPAT_AREA_CDS.REGISTER_AREA) 

Inner Join 
HR_FINAN_CLASS.FINAN_CLASS_CD 
On(OUTPAT_REGISTER.PRIMARY_FINAN = HR_FINAN_CLASS.FINAN_CLASS_CD) 

Where dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE)<>'RE' 
     and datepart(year,[entry_date]) in (2011, 2012) 
) src 
group by CLINIC_ID, SUMMARY_CATGRY, ENTRY_TYPE 
+0

我可能會建議您通過從查詢刪除'SUM's開始。如果這樣做沒有幫助,至少你已經淘汰了一大堆你已經給予我們其他人的信息。然後一次消除「JOIN」,直到問題消失。當你試圖將代碼削減到最小的例子來證明問題時,你可能會自己碰到答案!這幾乎就像調試。 – HABO

+0

謝謝你的洞察力。我現在只用了幾個月的SQL,而且在開發其他查詢時,我開始遇到更多的問題,因此您的建議將會很有用。 – Brice

回答

4

一個問題我看到的是在下面的章節:

Where dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE)<>'RE' 
     and datepart(year,[entry_date]) in (2011, 2012) 
) src 

看起來你在dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE)<>'RE'一個額外的,無與倫比的括號...相反,這應該是:

Where dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE<>'RE' 
     and datepart(year,[entry_date]) in (2011, 2012) 
) src 
+0

好的,刪除了額外的括號並得到了此錯誤消息:消息207,級別16,狀態1,行23 無效的列名稱'sumofentry_amount'。 – Brice

+0

感謝您的洞察力。 – Brice

5

看起來你在這條線上有一個額外的括號:

Where dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE)<>'RE' -- there is a closing but no opening 
            ^-- this is extra 

我通過格式化代碼找到了匹配的圓括號。

所以完整的查詢將是:

Select CLINIC_ID, 
    SUMMARY_CATGRY, 
    ENTRY_TYPE, 
    SUM(case when EntryMonth = 1 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jan12], 
    SUM(case when EntryMonth = 2 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Feb12], 
    SUM(case when EntryMonth = 3 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Mar12], 
    SUM(case when EntryMonth = 4 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Apr12], 
    SUM(case when EntryMonth = 5 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [May12], 
    SUM(case when EntryMonth = 6 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jun12], 
    SUM(case when EntryMonth = 7 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jul12], 
    SUM(case when EntryMonth = 8 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Aug12], 
    SUM(case when EntryMonth = 9 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Sep12], 
    SUM(case when EntryMonth = 10 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Oct12], 
    SUM(case when EntryMonth = 11 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Nov12], 
    SUM(case when EntryMonth = 12 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Dec12], 
    SUM(case when EntryYear = 2012 then [sumofentry_amount] else 0 end) [2012YTD], 
    SUM(case when EntryYear = 2011 then [sumofentry_amount] else 0 end) [2011YTD] 
From 
(
    SELECT [Non_Recurring_Clinic_Step1].CLINIC_ID, 
     dbo_HR_FINAN_CLASS.SUMMARY_CATGRY, 
     [TABLE_LAYOUT].ENTRY_TYPE, 
     datepart(month,[entry_date]) EntryMonth, 
     datepart(year,[entry_date]) EntryYear, 
     ENTRY_AMOUNT as [sumofentry_amount] 
    FROM [TABLE_LAYOUT] 
    Inner Join 
    (
     SELECT [GROUPING_OF_CLINIC_ID].CLINIC_ID, 
      OUTPAT_ACCT_REC.CHARGE_CLASS, 
      [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER, 
      [GROUPING_OF_CLINIC_ID].REGISTRATION_CD, 
      OUTPAT_REGISTER.PRIMARY_FINAN, 
      Replace(CONVERT(VARCHAR(10),OUTPAT_ACCT_REC.ENTRY_DATE,101), '/', '') AS ENTRY_DATE, 
      SUM(ENTRY_AMOUNT) AS ENTRY_AMOUNT 
     FROM OUTPAT_REGISTER 
     Left JOIN OUTPAT_BILL_REF 
      ON OUTPAT_REGISTER.PATIENT_NUMBER = OUTPAT_BILL_REF.PATIENT_NUMBER 
      AND OUTPAT_REGISTER.REGISTRATION_CD = OUTPAT_BILL_REF.REGISTRATION_CD 
     Left JOIN OUTPAT_ACCT_REC 
      ON OUTPAT_BILL_REF.PATIENT_NUMBER = OUTPAT_ACCT_REC.PATIENT_NUMBER 
      AND OUTPAT_BILL_REF.BILL_REFERENCE = OUTPAT_ACCT_REC.REFERENCE_NUM 
     Left JOIN 
     (
      SELECT CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD 
      FROM OP_VISIT_HISTRY 
      GROUP BY CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD 
     )AS [GROUPING_OF_CLINIC_ID] 
      ON OUTPAT_REGISTER.PATIENT_NUMBER = [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER 
      AND OUTPAT_REGISTER.REGISTRATION_CD =[GROUPING_OF_CLINIC_ID].REGISTRATION_CD 
     WHERE OUTPAT_ACCT_REC.ENTRY_DATE >'12/31/2010' 
     GROUP BY [GROUPING_OF_CLINIC_ID].CLINIC_ID, 
      OUTPAT_ACCT_REC.CHARGE_CLASS, 
      [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER, 
      [GROUPING_OF_CLINIC_ID].REGISTRATION_CD, 
      OUTPAT_ACCT_REC.ENTRY_DATE, 
      OUTPAT_REGISTER.PRIMARY_FINAN 
    )AS [Non_Recurring_Clinic_Step1] 
     On [TABLE_LAYOUT].ENTRY_CLASS = [Non_Recurring_Clinic_Step1].CHARGE_CLASS 
    Inner Join OUTPAT_REGISTER 
     On [Non_Recurring_Clinic_Step1].PATIENT_NUMBER = OUTPAT_REGISTER.PATIENT_NUMBER 
     And [Non_Recurring_Clinic_Step1].REGISTRATION_CD = OUTPAT_REGISTER.REGISTRATION_CD 
    Inner Join OUTPAT_AREA_CDS 
     On OUTPAT_REGISTER.REGISTER_AREA = OUTPAT_AREA_CDS.REGISTER_AREA 
    Inner Join HR_FINAN_CLASS.FINAN_CLASS_CD 
     On OUTPAT_REGISTER.PRIMARY_FINAN = HR_FINAN_CLASS.FINAN_CLASS_CD 
    Where dbo_OUTPAT_AREA_CDS.REG_AREA_TYPE<>'RE' 
     and datepart(year,[entry_date]) in (2011, 2012) 
) src 
group by CLINIC_ID, SUMMARY_CATGRY, ENTRY_TYPE 
+0

哇,你做得漂亮,它仍然醜陋 –

+0

@AaronBertrand是啊,這是醜陋的 – Taryn

+0

+1美化... –