首页 > 解决方案 > 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

标签: sql-server

解决方案


您为 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

你为什么将最大值分配transactionidproductid
是不是因为你用 cte 得到了错误的结果?
唯一有意义的是:

select QUANTITY,PRODUCTID ,
  TRANSACTIONID = (SELECT MAX(TRANSACTIONID) AS MAX_UNIT FROM productionCTE)
FROM productionCTE

虽然我不知道你想做什么。


推荐阅读