来自主查询的子查询条件 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:
- 按 B 排序 = 按月排序 (datetime_end)
- 按 B 排序 = 按 1 排序
我想做一些子查询 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:
- 按 B 排序 = 按月排序 (datetime_end)
- 按 B 排序 = 按 1 排序