sql-server - 如何汇总测试结果相同的序列号列表
问题描述
我已经序列化了发送出去进行测试的部件。这些序列号被分配给与车间订单号相关联的“容器”。这一切都是在纸上手动跟踪的,我想使用 SSRS Report Builder 创建一个报告,按显示容器和相关序列号的车间订单。我按容器号分组,显示序列号列表,它们是通过还是失败,然后显示序列号计数。我已经设法做到了这一切,但报告有几十页长。我想在一行上汇总所有具有相同状态的连续序列号,显示第一个序列号和最后一个序列号。下一行将包含具有不同状态的连续序列的汇总列表。等等等等。在这样做的同时,
(不幸的是,我目前在这个网站上的状态只允许我附上图片。)
解决方案
由于您没有用您正在使用的 SQL Server 版本标记您的问题,我假设它是一个相当新的版本......
在 SSRS 中这样做会很棘手,所以这就是我的处理方法。其他人可能会想出一个更优雅的方式,但如果没有,至少你有这个解决方案......
我在表变量中复制了您的数据集,然后派生了一个列,该列检查前一条记录是否具有相同的ShopOrder
, ContNumber
,并且TestResult
序列号比当前记录少一。
然后将其包装在一个查询中,该查询通过对该派生列进行运行求和来添加“批次”编号。最后,我得到每个批次的 MIN 和 MAX 值,并将它们连接到一个字符串中以用于最终输出。
代码看起来像这样......
声明 @t 表(ShopOrder varchar(10)、ContNumber varchar(10)、SerialNo int、TestResult varchar(10))
INSERT INTO @t VALUES
('ABC13-A', 'CONT-A', 13352 , 'Accept'),
('ABC13-A', 'CONT-A', 13353 , 'Accept'),
('ABC13-A', 'CONT-A', 13354 , 'Accept'),
('ABC13-A', 'CONT-A', 13355 , 'Accept'),
('ABC13-A', 'CONT-A', 13356 , 'Accept'),
('ABC13-A', 'CONT-A', 13357 , 'Accept'),
('ABC13-A', 'CONT-A', 13359 , 'Accept'),
('ABC13-A', 'CONT-A', 13360 , 'Reject'),
('ABC13-A', 'CONT-A', 13361 , 'Accept'),
('ABC13-A', 'CONT-A', 13362 , 'Accept'),
('ABC13-A', 'CONT-A', 13363 , 'Accept'),
('ABC13-A', 'CONT-A', 13364 , 'Accept'),
('ABC13-A', 'CONT-A', 13365 , 'Reject'),
('ABC13-A', 'CONT-A', 13366 , 'Accept'),
('ABC13-A', 'CONT-A', 13367 , 'Accept'),
('ABC13-A', 'CONT-A', 13368 , 'Accept')
--
SELECT DISTINCT
ShopOrder, ContNumber
, SerialNos = IIF(
MIN(SerialNo) OVER(PARTITION BY Batch) = Max(SerialNo) OVER(PARTITION BY Batch)
, CONCAT('',MIN(SerialNo) OVER(PARTITION BY Batch))
, CONCAT(MIN(SerialNo) OVER(PARTITION BY Batch), ' - ', Max(SerialNo) OVER(PARTITION BY Batch))
)
, TestResult
, RecCount = COUNT(*) OVER(PARTITION BY Batch)
FROM (
SELECT
*
, Batch = SUM(IsFirstSerial) OVER(ORDER BY RowN)
FROM
(
SELECT
*
, IsFirstSerial = IIF(LAG(RowN, 1) OVER(PARTITION BY ShopOrder, ContNumber, TestResult ORDER BY RowN) = RowN - 1, 0,1)
FROM (SELECT *, RowN = ROW_NUMBER() OVER(ORDER BY SerialNo) FROM @t) a
) x
) z
最终输出如下所示,我不确定您是如何计算记录的,但还提供了每个批次的记录计数。
推荐阅读
- dask - 当单个任务可以在 python 之外消耗大量内存时,dask.delayed 内存管理
- javascript - 将 APM 添加到 NuxtJS 项目的最佳方法是什么
- python - 复制文档 ID,使其成为字段的一部分
- security - 这是一个有效的漏洞吗?
- r - 我无法在 R 中使用“geom_sf()”绘制地图
- python - 项目在 Python / Scrapy 中屈服时失去了名字
- javascript - 从字符串变量中获取 chrome.storage 值?
- java - 保护 Eureka 客户端服务端点
- python - 检查目标时出错:预期 dense_192 有 3 个维度,但得到了形状为 (37118, 1) 的数组
- android - 如何访问自定义库的 strings.xml 资源?