sql-server - CTE 语句中不存在列名
问题描述
我正在尝试创建一个 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”无效
解决方案
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
推荐阅读
- c# - 仅修剪包含某些单词的字符串并将它们添加到 c# 中的字符串列表中
- c++ - 如何在两个 STL 容器之间移动 unique_ptr 对象
- powerbi - 我们可以为某些用户关闭 RLS 吗?
- sql - Laravel Eloquent 中有一些 WITH 子句?
- jquery - 猫头鹰轮播限制点分页
- python - 计算 ID 在随后的 180 天内出现的次数
- reactjs - React 为两个不同的图标创建一个样式的组件?
- machine-learning - 使用梯度下降的多元线性回归
- firefox-addon - 在 Android 上安装 Firefox 插件
- scala - 将隐式解析推迟到宏扩展