来自主查询的子查询条件 select

Subquery condition from main query select

我想做一些子查询 select,其条件取自主查询 select。

这是我的查询:

SELECT 
    DISTINCT MONTH(datetime_end) as B,
    (
        SELECT 
                SUM(DATEDIFF(DAY, datetime_start, datetime_end))
            FROM 
                    [simrke].[trx_medical_ruang] MR,
                    [simrke].[trx_ruang] R
            WHERE
                MR.ruang_cd = R.ruang_cd AND 
                R.ruang_nm like 'BAKUNG%'   AND
                MONTH(datetime_end) = B
    )
FROM 
        [simrke].[trx_medical_ruang] M
ORDER BY B
    ;

其中子查询 select 条件 MONTH(datetime_end) = B 来自之前的 select 但我收到此错误消息:

[Err] 42S22 - [SQL Server]Invalid column name 'B'.

指向第一个 B select 的正确方法是什么?

试试这个:MONTH(MR.datetime_end) = MONTH(M.datetime_end)

SELECT 
    DISTINCT MONTH(datetime_end) as B,
    (
        SELECT 
                SUM(DATEDIFF(DAY, datetime_start, datetime_end))
            FROM 
                    [simrke].[trx_medical_ruang] MR,
                    [simrke].[trx_ruang] R
            WHERE
                MR.ruang_cd = R.ruang_cd AND 
                R.ruang_nm like 'BAKUNG%'   AND
                MONTH(MR.datetime_end) = MONTH(M.datetime_end)
    )
FROM 
        [simrke].[trx_medical_ruang] M
ORDER BY B

您的查询与此相同吗?

SELECT MONTH(datetime_end) as B,
       SUM(DATEDIFF(DAY, datetime_start, datetime_end))
FROM   [simrke].[trx_medical_ruang] MR
JOIN   [simrke].[trx_ruang] R
ON     MR.ruang_cd = R.ruang_cd 
WHERE  R.ruang_nm like 'BAKUNG%'   
GROUP BY MONTH(datetime_end)

也尝试使用 ANSI 风格的连接

根据 SELECT 语句的逻辑处理顺序,您不能在 ORDER By 子句中使用 B(即别名),而必须使用您在 SELECT 子句中编写的内容,即 MONTH( datetime_end) 或列的序列号(数字),在您的情况下为 1。 在镜头中,您可以选择以下任何一项来替换 ORDER BY 子句中的 B:

  1. 按 B 排序 = 按月排序 (datetime_end)
  2. 按 B 排序 = 按 1 排序