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 语句中使用。