[英]SQL: Converting a Sub-query to a Common Table Expression
我正在學習一門課程中的SQL,並且正在使用MS SQL Server(即T-SQL)上的SQL。 我正在嘗試使用公用表表達式(CTE)重構子查詢。 這是工作中的子查詢版本:
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE ADMISSION_PROV_ID IN (
SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
我以為CTE(幾乎)是一個替代品,因此我嘗試了以下操作:
WITH Not_Good AS ( SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE PAT_ENC_HSP.ADMISSION_PROV_ID IN (Not_Good.PROV_ID)
但是我在最后的WHERE
子句中遇到語法錯誤: The multi-part identifier "Not_Good.PROV_ID" could not be bound.
這是什么問題?
我沒有任何缺少ON
條件的JOIN
,也沒有看到別名缺失。
在此先感謝您的時間!
您已經很接近了,但是您不能以上面列出的方式在'IN'語句中使用CTE。 您可以執行以下操作:
WITH Not_Good AS ( SELECT DISTINCT PROV_ID
FROM CL_SER_HIM_LST_VST
WHERE HIM_STATUS_C <> 1001
)
SELECT PAT_ENC_CSN_ID 'CSN',
ADMISSION_PROV_ID 'Provider ID'
FROM PAT_ENC_HSP
WHERE PAT_ENC_HSP.ADMISSION_PROV_ID IN (select PROV_ID from Not_Good)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.