Select CTE 中子查询的结果
Select result of subquery in CTE
我正在使用其中包含子查询的 CTE。然后我尝试从 CTE 中的子查询结果中 select,但我收到 Invalid Column Name
错误。
查询:
DECLARE @User AS VARCHAR(50)
SET @User = 'test.user'
WITH cte AS (
SELECT
o.db_OrderNo,
o.db_Deferral
FROM
tblOrders o
LEFT JOIN tblUserProfile up on up.db_UserId = o.db_RTS
WHERE
o.db_Deleted = 0
AND (select OrderBucketId from Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo) as Task) IN (1, 2, 3, 4)
AND up.db_Email LIKE @User + '%'
)
SELECT COUNT(DISTINCT (CASE WHEN Task = 1 AND db_Deferral = 0 THEN db_OrderNo
END)) as OrderInEvalCount,
COUNT(DISTINCT (CASE WHEN Task = 2 AND db_Deferral = 0 THEN db_OrderNo
END)) as OrderInDfcCount,
COUNT(DISTINCT (CASE WHEN Task IN (3, 4) AND (select OrderStepId from Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo)) NOT IN (37, 39) AND
db_Deferral = 0 THEN db_OrderNo
END)) as OrderWipCount,
COUNT(DISTINCT (CASE WHEN db_Deferral <> 0 THEN db_OrderNo
END)) as OrderInPendedCount
FROM cte;
它没有将 Task
识别为一个列。不太习惯做子查询,所以格式可能是错误的。不确定 temp table 是否可以提供帮助。任何帮助将不胜感激。
您的子查询在 WHERE
子句中。列仅来自 FROM
子句。您可以通过多种方式处理此问题。如果您知道子查询不 return 重复,则使用 CROSS APPLY
:
将逻辑移动到 FROM
子句
WITH cte AS (
SELECT o.db_OrderNo, o.db_Deferral
FROM tblOrders o LEFT JOIN
tblUserProfile
up on up.db_UserId = o.db_RTS CROSS APPLY
Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo) t
WHERE o.db_Deleted = 0 AND
t.OrderBucketId IN (1, 2, 3, 4) AND
up.db_Email LIKE @User + '%'
)
我正在使用其中包含子查询的 CTE。然后我尝试从 CTE 中的子查询结果中 select,但我收到 Invalid Column Name
错误。
查询:
DECLARE @User AS VARCHAR(50)
SET @User = 'test.user'
WITH cte AS (
SELECT
o.db_OrderNo,
o.db_Deferral
FROM
tblOrders o
LEFT JOIN tblUserProfile up on up.db_UserId = o.db_RTS
WHERE
o.db_Deleted = 0
AND (select OrderBucketId from Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo) as Task) IN (1, 2, 3, 4)
AND up.db_Email LIKE @User + '%'
)
SELECT COUNT(DISTINCT (CASE WHEN Task = 1 AND db_Deferral = 0 THEN db_OrderNo
END)) as OrderInEvalCount,
COUNT(DISTINCT (CASE WHEN Task = 2 AND db_Deferral = 0 THEN db_OrderNo
END)) as OrderInDfcCount,
COUNT(DISTINCT (CASE WHEN Task IN (3, 4) AND (select OrderStepId from Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo)) NOT IN (37, 39) AND
db_Deferral = 0 THEN db_OrderNo
END)) as OrderWipCount,
COUNT(DISTINCT (CASE WHEN db_Deferral <> 0 THEN db_OrderNo
END)) as OrderInPendedCount
FROM cte;
它没有将 Task
识别为一个列。不太习惯做子查询,所以格式可能是错误的。不确定 temp table 是否可以提供帮助。任何帮助将不胜感激。
您的子查询在 WHERE
子句中。列仅来自 FROM
子句。您可以通过多种方式处理此问题。如果您知道子查询不 return 重复,则使用 CROSS APPLY
:
FROM
子句
WITH cte AS (
SELECT o.db_OrderNo, o.db_Deferral
FROM tblOrders o LEFT JOIN
tblUserProfile
up on up.db_UserId = o.db_RTS CROSS APPLY
Main.udfGetOrderStatusStepInfoByOrderNo(o.db_OrderNo) t
WHERE o.db_Deleted = 0 AND
t.OrderBucketId IN (1, 2, 3, 4) AND
up.db_Email LIKE @User + '%'
)