Sql server 列名不为';不存在于CTE语句中
我正在尝试创建一个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
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。