SQL - 普通 Table 表达式中的减法,
SQL - Subtraction within a Common Table Expression,
------ 已解决 ------
我不必尝试在 CTE 范围内执行减法,而只需将其放入主 select 列表中使用此特定 CTE 的子查询中。
问题是,`InnerOQLI.FreePlaceCount 没有被识别,因为它没有在 CTE 的范围内定义并且只在 Exists 语句中使用。
------ 问题 ----------
这是我第一次使用 CTE,我将多个 CTE 连接在一起,以便可以在单个列中检索总计。
我需要在其中一个 CTE 中执行减法
我第一次是这样写的
MyCount2
AS
(
SELECT DISTINCT
O.ID AS OrderID,
(
(
(SELECT SUM(InnerOC.[Count])
FROM Order InnerO
INNER JOIN SubOrder InnerSO ON InnerO.ID = InnerSO.OrderID
INNER JOIN OrderComponent InnerOC ON SO.ID = OC.SubOrderID
WHERE OC.OrderComponentTypeID IN (1,2,4,5)
AND EXISTS (SELECT * FROM OrderQuoteLineItem InnerOQLI
WHERE InnerOQLI.OrderQuoteLineItemTypeID = 9 AND Order.ID = InnerO.ID)
AND Inner0.ID = ).ID)
)
- --< Minus Here
OQLI.FreePlaceCount
) AS [SHPCommExpression2]
FROM Order O
INNER JOIN SubOrder SO ON O.ID = SO.OrderID
INNER JOIN OrderComponent OC ON SO.ID = OC.SubOrderID
INNER JOIN OrderQuoteLineItem OQLI ON SO.ID = 0QLI.SubOrderID
),
无需过多赘述,这会返回不正确的数据,因为主查询中有重复的行。 (我相信它是主查询中相同连接的 cos)
所以我写了这个
MyCount2
AS
(SELECT InnerO.ID AS OrderID
SUM(InnerOC.[Count]
- InnerOQLI.FreePlaceCount) --- Tried to place subtraction here ----
AS [SHPCommExpression12])
FROM Order InnerO
INNER JOIN SubOrder InnerSO ON InnerO.ID = InnerSO.OrderID
INNER JOIN OrderComponent InnerOC ON SO.ID = OC.SubOrderID
WHERE OC.OrderComponentTypeID IN (1,2,4,5)
AND EXISTS (SELECT * FROM OrderQuoteLineItem InnerOQLI
WHERE InnerOQLI.OrderQuoteLineItemTypeID = 9 AND Order.ID = InnerO.ID)
GROUP BY InnerO.ID)
),
你可以看到我尝试执行减法的地方,但它不识别 InnerOQLI,我试图添加它来执行减法。我不知道如何纠正这个问题,我意识到它不能完全识别 InnerOQLI
因为它在 Exists 语句中,有什么办法吗?如果有人可以提供帮助,我将不胜感激
谢谢
我没有尝试在 CTE 范围内执行减法,而是不得不将它放入主 select 列表中使用此特定 CTE 的子查询中。
问题是,`InnerOQLI.FreePlaceCount 没有被识别,因为它没有在 CTE 的范围内定义,并且只在 Exists 语句中使用。
------ 已解决 ------
我不必尝试在 CTE 范围内执行减法,而只需将其放入主 select 列表中使用此特定 CTE 的子查询中。
问题是,`InnerOQLI.FreePlaceCount 没有被识别,因为它没有在 CTE 的范围内定义并且只在 Exists 语句中使用。
------ 问题 ----------
这是我第一次使用 CTE,我将多个 CTE 连接在一起,以便可以在单个列中检索总计。
我需要在其中一个 CTE 中执行减法
我第一次是这样写的
MyCount2
AS
(
SELECT DISTINCT
O.ID AS OrderID,
(
(
(SELECT SUM(InnerOC.[Count])
FROM Order InnerO
INNER JOIN SubOrder InnerSO ON InnerO.ID = InnerSO.OrderID
INNER JOIN OrderComponent InnerOC ON SO.ID = OC.SubOrderID
WHERE OC.OrderComponentTypeID IN (1,2,4,5)
AND EXISTS (SELECT * FROM OrderQuoteLineItem InnerOQLI
WHERE InnerOQLI.OrderQuoteLineItemTypeID = 9 AND Order.ID = InnerO.ID)
AND Inner0.ID = ).ID)
)
- --< Minus Here
OQLI.FreePlaceCount
) AS [SHPCommExpression2]
FROM Order O
INNER JOIN SubOrder SO ON O.ID = SO.OrderID
INNER JOIN OrderComponent OC ON SO.ID = OC.SubOrderID
INNER JOIN OrderQuoteLineItem OQLI ON SO.ID = 0QLI.SubOrderID
),
无需过多赘述,这会返回不正确的数据,因为主查询中有重复的行。 (我相信它是主查询中相同连接的 cos)
所以我写了这个
MyCount2
AS
(SELECT InnerO.ID AS OrderID
SUM(InnerOC.[Count]
- InnerOQLI.FreePlaceCount) --- Tried to place subtraction here ----
AS [SHPCommExpression12])
FROM Order InnerO
INNER JOIN SubOrder InnerSO ON InnerO.ID = InnerSO.OrderID
INNER JOIN OrderComponent InnerOC ON SO.ID = OC.SubOrderID
WHERE OC.OrderComponentTypeID IN (1,2,4,5)
AND EXISTS (SELECT * FROM OrderQuoteLineItem InnerOQLI
WHERE InnerOQLI.OrderQuoteLineItemTypeID = 9 AND Order.ID = InnerO.ID)
GROUP BY InnerO.ID)
),
你可以看到我尝试执行减法的地方,但它不识别 InnerOQLI,我试图添加它来执行减法。我不知道如何纠正这个问题,我意识到它不能完全识别 InnerOQLI
因为它在 Exists 语句中,有什么办法吗?如果有人可以提供帮助,我将不胜感激
谢谢
我没有尝试在 CTE 范围内执行减法,而是不得不将它放入主 select 列表中使用此特定 CTE 的子查询中。
问题是,`InnerOQLI.FreePlaceCount 没有被识别,因为它没有在 CTE 的范围内定义,并且只在 Exists 语句中使用。