Sql 每个库存项目的前3项记录
我们有一个存储过程,它逐行遍历选定的库存项目,并用每个库存项目的3个最新销售订单号填充一个表:Sql 每个库存项目的前3项记录,sql,sql-server,Sql,Sql Server,我们有一个存储过程,它逐行遍历选定的库存项目,并用每个库存项目的3个最新销售订单号填充一个表: INSERT INTO TOP3_STOCK_SALES_DATA ( ORDERDATE , SEQNO , STOCKCODE , QUANTITY , ROW ) SELECT TOP 3 h.ORDERDATE ,
INSERT INTO TOP3_STOCK_SALES_DATA
( ORDERDATE ,
SEQNO ,
STOCKCODE ,
QUANTITY ,
ROW
)
SELECT TOP 3
h.ORDERDATE ,
h.SEQNO ,
l.STOCKCODE ,
l.ORD_QUANT ,
ROW_NUMBER() OVER ( ORDER BY h.ORDERDATE DESC, h.SEQNO DESC ) AS row
FROM SALESORD_HDR h ,
SALESORD_LINES l
WHERE l.HDR_SEQNO = h.SEQNO
AND l.STOCKCODE IN ( '1000-ACQ45' )
ORDER BY h.ORDERDATE DESC ,
h.SEQNO DESC
是否有办法运行此语句或批量而不是逐行获得相同的结果?您的书面查询不会返回每个库存项目的前3条记录,但只返回返回结果集中的前3条记录。要获得每个库存项目的前3名,请参见下文
INSERT INTO TOP3_STOCK_SALES_DATA
( ORDERDATE ,
SEQNO ,
STOCKCODE ,
QUANTITY ,
ROW
)
SELECT A.ORDERDATE
,A.SEQNO
,A.STOCKCODE
,A.ORD_QUANT
,A.row
FROM (
SELECT
h.ORDERDATE ,
h.SEQNO ,
l.STOCKCODE ,
l.ORD_QUANT ,
ROW_NUMBER() OVER (PARTITION BY l.STOCKCODE ORDER BY h.ORDERDATE DESC, h.SEQNO DESC ) AS row
FROM SALESORD_HDR h
INNER JOIN SALESORD_LINES l ON l.HDR_SEQNO = h.SEQNO
) A
WHERE ROW <= 3
能否添加一些示例数据以及结果应该是什么?请解释“批量”和“逐行”的含义,以及为什么要将后者转换为前者。insert语句一次针对一个股票代码执行。假设我有25个股票代码要处理,我希望能够在一个insert语句中处理所有25个股票代码。它将获得每个股票代码的最近3个销售订单,即一次插入75行。我还没有完全测试过它,但看起来它完美地回答了我的问题-谢谢!我不知道如何批量完成。出于兴趣,我可以问你为什么要用这种方式编码连接吗?l.HDR上的内部连接线l\U SEQNO=h.SEQNO。这是个人偏好,还是有性能优势?这不是批量插入,批量插入在sql server中是一个不同的概念,但读了您的问题后,我猜您是在寻找这个解决方案,无论如何,很高兴它有所帮助:您连接两个表的方式是一种有效的语法,但它是连接的唯一语法,我已经将其更改为使用ON子句和关键字innerjoin的较新的join语法。这是首选语法:谢谢:我已经好几年没有使用SQL了,所以我很想看看在此期间发生了什么变化