如何在Item Ledger Entry表中查询指定物料的最新Vendor No.?
修改方案获取指定物料的最新Vendor No.
要获取指定物料的最新Vendor No.,你需要先筛选出采购类记录(Entry Type=0且Source Type=2),并针对每个物料取Posting Date最晚的那条记录的Vendor No.。以下是修改后的完整SQL查询:
SELECT ile.[Posting Date], CASE WHEN ile.[Entry Type]=1 THEN 'Sale' WHEN ile.[Entry Type]=5 THEN 'Consumption' END AS Entry_Type, ile.[Item No_], ile.[Description], ile.[Quantity], ile.[Unit of Measure Code], item.[Description], latest_vendor.[Vendor No_] AS [Last Vendor No.] FROM [MyServer]..[MyDatabase$Item Ledger Entry] as ile with (nolock) LEFT JOIN [MyServer]..[MyDatabase$Item] as item ON item.[No_]=ile.[Item No_] -- 关联获取每个物料的最新供应商编号 LEFT JOIN ( SELECT [Item No_], [Vendor No_], -- 按Posting Date倒序排序,取最新的一条 ROW_NUMBER() OVER (PARTITION BY [Item No_] ORDER BY [Posting Date] DESC) AS rn FROM [MyServer]..[MyDatabase$Item Ledger Entry] WHERE [Entry Type] = 0 AND [Source Type] = 2 ) AS latest_vendor ON latest_vendor.[Item No_] = ile.[Item No_] AND latest_vendor.rn = 1 -- 只保留最新的那条记录 WHERE ile.[Entry Type] In (1,5) AND ile.[Item No_] ='123456789';
关键说明:
- 子查询中使用
ROW_NUMBER()函数,按Item No_分组,每组内按Posting Date降序排列,标记最新的记录为rn=1。 - 通过LEFT JOIN将最新供应商编号关联到主查询,确保即使物料没有采购记录,主查询结果也不会被过滤。
- 如果你的系统中判断"最新"的依据不是
Posting Date,可以替换为Entry No_(通常Entry No_是自增的,更大的编号代表更晚的记录),修改排序条件为ORDER BY [Entry No_] DESC即可。
内容的提问来源于stack exchange,提问作者amaslow
相关产品推荐
相关产品推荐

