0

我有一个如下所示的事务表,显示正在生产的产品,然后在扫描到订单时将其删除。我想显示已扫描和尚未扫描到订单的两种产品,而不列出表中的每笔交易。我从一个 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      |
+----------+-----------+-------------------------+-------------+-------------+
4

1 回答 1

1

我可能会夸大其词,但从您的数据来看,这确实看起来像聚合:

select 
    unique,
    max(weight) weight,
    productionDate,
    max(orderNumber) orderNumber
from mtable t
group by unique, productionDate
于 2020-06-11T20:49:31.757 回答