Sql server 列名不为';不存在于CTE语句中

Sql server 列名不为';不存在于CTE语句中,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在尝试创建一个CTE语句: WITH StartCash (StartCash) AS ( SELECT StartCash FROM CashierInfo WHERE CashierID = (SELECT MAX( CashierID) FROM CashierInfo WHERE UserID = 1 AND EndDate IS NULL) ) SELECT

我正在尝试创建一个CTE语句:

WITH StartCash (StartCash) AS
(
    SELECT StartCash 
    FROM CashierInfo 
    WHERE CashierID = (SELECT MAX( CashierID) 
                       FROM CashierInfo  
                       WHERE UserID = 1 AND EndDate IS NULL)
)
SELECT
    StartCash, a.username AS Username, b.Adress AS Adress,
    (SUM(c.quantity * c.discountprice)) AS SumPrice,
    c.Printed AS Printed, c.CashierUserID AS CashierUserID,
    c.RetailDelivery AS RetailDelivery, c.TrnDocumentID 
FROM
    Users a 
JOIN
    InventoryTransTemp c ON c.CashierUserID = a.UserID 
JOIN
    DeliveryAdress b ON b.DeliveryAdressID = c.DeliveryAdressID 
WHERE
    c.cashieruserid =  1 
GROUP BY
    a.Username, b.Adress, c.Printed, 
    c.CashierUserID, c.RetailDelivery, c.TrnDocumentID
但是我犯了个错误

无效的列名“StartCash”


from子句中没有CTE。您需要加入CTE,但您的CTE只有摘要值

StartCash
不存在,因为您的CTE未包含在FROM子句中

仅根据我在你的问题中看到的情况,我认为将
CashierInfo.UserID
加入
Users.UserID
是安全的。 因此,请尝试以下方法:

WITH StartCash
AS (
    SELECT StartCash
        ,UserID
    FROM CashierInfo
    WHERE CashierID = (
            SELECT MAX(CashierID)
            FROM CashierInfo
            WHERE UserID = 1
                AND EndDate IS NULL
            )
    )
SELECT sc.StartCash
    ,a.username AS Username
    ,b.Adress AS Adress
    ,(SUM(c.quantity * c.discountprice)) AS SumPrice
    ,c.Printed AS Printed
    ,c.CashierUserID AS CashierUserID
    ,c.RetailDelivery AS RetailDelivery
    ,c.TrnDocumentID
FROM StartCash sc
INNER JOIN Users a ON sc.UserID = a.UserID
INNER JOIN InventoryTransTemp c ON c.CashierUserID = a.UserID
INNER JOIN DeliveryAdress b ON b.DeliveryAdressID = c.DeliveryAdressID
WHERE c.cashieruserid = 1
GROUP BY sc.StartCash
    ,a.Username
    ,b.Adress
    ,c.Printed
    ,c.CashierUserID
    ,c.RetailDelivery
    ,c.TrnDocumentID

StartCash
不存在,因为您没有从CTE中选择,也没有在主查询的任何位置的from子句中使用CTE。