来自主查询选择的子查询条件

Posted

技术标签:

【中文标题】来自主查询选择的子查询条件【英文标题】:Subquery condition from main query select 【发布时间】:2016-04-05 08:45:59 【问题描述】:

我想做一些子查询选择,它的条件取自主查询选择。

这是我的查询:

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
    ;

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

[Err] 42S22 - [SQL Server]列名“B”无效。

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

【问题讨论】:

您不能在子查询中引用列别名。更改为在子查询中使用完整表达式 MONTH(M.datetime_end) 谢谢你,这是工作.. 【参考方案1】:

试试这个: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

【讨论】:

【参考方案2】:

你的查询和这个一样吗?

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 样式的连接

【讨论】:

【参考方案3】:

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

    按 B 订购 = 按月订购(日期时间结束) 按 B 订购 = 按 1 订购

【讨论】:

以上是关于来自主查询选择的子查询条件的主要内容,如果未能解决你的问题,请参考以下文章

在主查询的“IN”子句中使用逗号分隔列表的子查询结果

SQL中的子查询

SQL Server:根据来自其他 2 个表的子查询从表中选择

来自与主网格相同数据的子网格

甲骨文。防止合并子查询和主查询条件

mysql中主查询和子查询关系是啥?