繁体   English   中英

SQL:将子查询转换为公用表表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM