sql-server - 根据日期查找特定产品代码的下一个非空值
问题描述
我正在尝试一段时间来创建一个查询,该查询将在给定日期范围内的每个日期给出特定项目的库存值。
表格保持原样(NAVISION),我们不能影响结构,所以我们必须使用我们所拥有的。
结果基于查询包含日期、项目和项目分类帐条目的 3 个不同表(其中保留所有与项目相关的移动 IN、OUT、转入、转出......),所有这些移动的总和给出当前库存等级
以下查询的结果部分正常,但问题是当日没有变化时,产品的行为 NULL。
我们需要的是让查询转到特定产品的 Stock 的第一个下一个值,并显示该值而不是 NULL。因此,它应该首先找到下一个非 NULL 值,而不是让 Stock NULL 显示这个值
正如我们现在所拥有的那样,查询是:
SELECT
ROW_NUMBER() OVER (PARTITION BY [Date] ORDER BY i.[No_] ASC) as BarcodeInDate#
,CAST([Date] as date) as [Date]
,i.No_ as Barcode
,CAST(q.Stock as int) as Stock
FROM [XLS].[dbo].[XLS$XLS Calendar] C
CROSS JOIN XLS$Item i
LEFT JOIN
(
SELECT
DISTINCT [Posting Date]
,[Item No_]
,SUM([Invoiced Quantity]) OVER (PARTITION BY [Item No_] ORDER BY [Posting Date]) Stock
FROM
[dbo].[XLS$Item Ledger Entry]
) q
on C.Date=q.[Posting Date] and i.No_=q.[Item No_]
where
C.[Date] between getdate()-31 and getdate()-1
ORDER BY C.Date DESC
我不知道如何在这里以最佳方式表示输出,所以下面是一张图片。
**更新
正如@SteveC 推荐的...3 使用的表在下面创建语句,以便您可以查看查询表的数据和结构。
项目分类帐分录表
要在这里发布...链接以在我的驱动器上创建查询
https://drive.google.com/file/d/1xCq0_lh0S0gq7rx1VMC0ZHK4buu_rkit/view?usp=sharing
日历,它只是一个基本的单列日历,以便在查询中包含所有日期,即使项目移动没有变化。使用这个或一些动态的......它只是给定范围内的所有日期(例如过去 30 天)
CREATE TABLE [XLS$XLS Calendar](
Date DATE NOT NULL PRIMARY KEY
);
INSERT INTO XLS$Item(Date) VALUES ('14-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('15-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('16-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('17-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('18-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('19-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('20-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('21-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('22-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('23-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('24-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('25-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('26-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('27-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('28-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('29-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('30-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('31-07-2021');
INSERT INTO XLS$Item(Date) VALUES ('01-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('02-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('03-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('04-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('05-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('06-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('07-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('08-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('09-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('10-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('11-08-2021');
INSERT INTO XLS$Item(Date) VALUES ('12-08-2021');
项目简化,因为大多数数据对于这个查询并不重要......它只是项目描述和代码,重量等......
CREATE TABLE XLS$Item(
No_ INTEGER NOT NULL PRIMARY KEY
,Description VARCHAR(30) NOT NULL
,Product_Group_Code VARCHAR(9) NOT NULL
);
INSERT INTO mytable(No_,Description,Product_Group_Code) VALUES (3856005147540,'MS MS-500 napajanje 500W','NAPAJANJE');
INSERT INTO mytable(No_,Description,Product_Group_Code) VALUES (8600412596522,'Teracell Flip Cover preklopna','FUTMASMOB');
INSERT INTO mytable(No_,Description,Product_Group_Code) VALUES (8600412615940,'Teracell Evo kabl za iph crni','KABLZAMOB');
INSERT INTO mytable(No_,Description,Product_Group_Code) VALUES (8806090987564,'Samsung Galaxy A52 crni','MOBTELEF');
解决方案
推荐阅读
- ruby-on-rails - 在 ruby 中添加到 id 的数据库列表中
- azure - 是否可以在 azcopy 中使用正则表达式?
- macos - 如果此系统没有任何打印机,如何在 Mac 上使用 QPageSetupDialog?
- java - 修改值后键值对的颠簸转换规范
- python - 我如何在python中创建检查列表是否为向量的函数
- python - 如何根据python中最近的时间戳左连接两个长度不同的数据帧并且不丢失任何行?
- mybatis - Java从Oracle获取(日期和时间),有的小于1小时,有的正常
- javascript - 如何在javascript中获取选择开始和结束索引?
- json - 仅使用 bash 解析来自 curl 的 json 响应,而不使用 jq 或其他工具
- json - 通过 JSON 前后反应显示/导航