我有一个如下所示的事务表,显示正在生产的产品,然后在扫描到订单时将其删除。我想显示已扫描和尚未扫描到订单的两种产品,而不列出表中的每笔交易。我从一个 1 秒的简单选择变成了一个 10 分钟的带有单个子查询的选择。
有没有更好的方法让我这样做?
我正在运行 Microsoft SQL Server 2017,无法修改表结构,因为它链接到专有生产系统。我不相信我可以聚合,因为还有其他文本字段要返回。
选择子查询(很慢)
SELECT
Unique,
Weight,
ProductionDate,
ProductCode,
(
SELECT OrderNumber
FROM Table AS B
WHERE
B.Unique = A.Unique
) AS OrderNumber
FROM Table AS A
源表
+----------+-----------+-------------------------+-------------+-------------+
| Unique | Weight | ProductionDate | OrderNumber | ProductCode |
+----------+-----------+-------------------------+-------------+-------------+
| 14962904 | 1.920000 | 2020-06-05 11:43:12.000 | | ABC123 |
| 14962905 | 1.990000 | 2020-06-05 11:43:14.000 | | ABC123 |
| 14962906 | 2.020000 | 2020-06-05 11:43:20.000 | | ABC123 |
| 14962909 | 2.030000 | 2020-06-05 11:45:09.000 | | ABC123 |
| 14962909 | -2.030000 | 2020-06-05 11:45:09.000 | 431723 | ABC123 |
| 14962910 | 2.020000 | 2020-06-05 11:45:15.000 | | ABC123 |
| 14962910 | -2.020000 | 2020-06-05 11:45:15.000 | 431723 | ABC123 |
| 14962911 | 1.990000 | 2020-06-05 11:45:24.000 | | ABC123 |
| 14962911 | -1.990000 | 2020-06-05 11:45:24.000 | 431723 | ABC123 |
+----------+-----------+-------------------------+-------------+-------------+
期望的结果
+----------+-----------+-------------------------+-------------+-------------+
| Unique | Weight | ProductionDate | OrderNumber | ProductCode |
+----------+-----------+-------------------------+-------------+-------------+
| 14962904 | 1.920000 | 2020-06-05 11:43:12.000 | | ABC123 |
| 14962905 | 1.990000 | 2020-06-05 11:43:14.000 | | ABC123 |
| 14962906 | 2.020000 | 2020-06-05 11:43:20.000 | | ABC123 |
| 14962909 | 2.030000 | 2020-06-05 11:45:09.000 | 431723 | ABC123 |
| 14962910 | 2.020000 | 2020-06-05 11:45:15.000 | 431723 | ABC123 |
| 14962911 | 1.990000 | 2020-06-05 11:45:24.000 | 431723 | ABC123 |
+----------+-----------+-------------------------+-------------+-------------+