来自主查询选择的子查询条件
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 订购
【讨论】:
以上是关于来自主查询选择的子查询条件的主要内容,如果未能解决你的问题,请参考以下文章