sql-server - cte中的数据是否会低于其实际值
问题描述
这是我的问题,我试图了解值高于 1000 的列如何在我的 CTE(即表 transaction-id)中减少到低于 1000 的值
这是我的代码:
with productionCTE(quantity, transactionid, productid) as
(
select
quantity, ProductID, max(transactionid)
from
Production.TransactionHistory
group by
Quantity, ProductID
)
select
quantity, transactionid,
productid = (select max(transactionid) as MAX_UNIT from productionCTE)
from
productionCTE
解决方案
您为 cte 声明的列的顺序如下:
with productionCTE(quantity, transactionid, productid)
然后是cte的主体:
select quantity,ProductID,max(transactionid)
from Production.TransactionHistory
GROUP BY Quantity,ProductID
所以没问题quantity
,但是在结果ProductID
中选择了第二个transactionid
,因为这是您在 cte 标题中声明为第二列的内容,反之亦然,对于 3d 列。
所以你所看到ProductID
的实际上是transactionid
。
将声明更改为:
with productionCTE(quantity, productid, transactionid)
那么这里:
select QUANTITY,TRANSACTIONID ,
PRODUCTID = (SELECT MAX(TRANSACTIONID) AS MAX_UNIT FROM productionCTE)
FROM productionCTE
你为什么将最大值分配transactionid
给productid
?
是不是因为你用 cte 得到了错误的结果?
唯一有意义的是:
select QUANTITY,PRODUCTID ,
TRANSACTIONID = (SELECT MAX(TRANSACTIONID) AS MAX_UNIT FROM productionCTE)
FROM productionCTE
虽然我不知道你想做什么。
推荐阅读
- angular - 如何在 nx-workspace 中构建单个应用程序
- javascript - TypeError:package.function 不是 android nativescript 插件中的函数
- julia - CatagoricalArrays 可以与 Julia Dataframes 一起使用以将多列从字符串转换为类别吗?
- python - 如何旋转标签栏的标签(tabWidget)
- c# - 是否可以在不使用 MailKit 下载整个邮件的情况下修改/附加邮件?
- ignite - Gridgain Client 节点中频繁出现 TcpCommunicationSpi 错误
- typescript - 从标记的模板文字函数参数推断类型
- ruby-on-rails - 扩展一个 apipie-rails 验证器
- python - 编辑绘图以使其平滑
- laravel - 错误:语法错误,意外'$app'(T_VARIABLE),期望')'