首页 > 解决方案 > 将自定义值添加到 SELECT

问题描述

我有这个查询:

SELECT r.record_id,
       r.part_id,
       r.record_dt,
       a.association_part_a,
       a.association_part_b,
       a.association_type,
       a.association_id,
       r.product_id
FROM   dbo.synfact_association AS a
       INNER JOIN dbo.synfact_record AS r
               ON a.record_id = r.record_id
WHERE  ( r.part_id IN (SELECT part_id
                       FROM   dbo.synfact_record AS synfact_record_1
                       WHERE  ( record_status = 1 )
                              AND ( record_type = 0 )) )
       AND ( r.product_id IN ( 38, 39, 40, 41,
                               42, 43, 44, 45,
                               46, 37, 47, 48,
                               49, 50, 51, 52,
                               53, 54, 58, 59 ) )
       AND ( r.record_id > 499 )
       AND ( r.record_status = 1 ) 

我想使用第二个查询的 record_dt 作为第一个查询中的 record_dt 的替换。我想通过链接 part_id 上的值来做到这一点,因为它们都有它。第一个查询给出一个包含 part_id 的 record_id 列表,第二个查询为每个 record_id 获取最新的 record_dt。我的最终目标是从第二个查询中获取最新的 record_dt 以在第一个查询中替换。我可以在 part_id 上链接它们。

我需要用这个 SELECT 替换 r.record_dt:

SELECT DISTINCT RECORD_DT FROM synfact_record WHERE PROCESS_STEP_LIST_ID IN (21,22,23) ORDER BY RECORD_DT DESC

这是第一个查询所做的

RECORD_ID PART_ID 记录_DT ASSOCIATION_PART_A ASSOCIATION_PART_B ASSOCIATION_TYPE ASSOCIATION_ID PRODUCT_ID
286660 SYN12021020100018 2021-02-15 11:18:11.840 SYN12021020100018 21-02-01-000003 唯一身份 452028 39
287146 SYN12021020300773 2021-02-17 07:30:59.603 SYN12021020300773 2102-00-005218 唯一身份 455735 38
287147 SYN12021020300774 2021-02-17 07:31:04.780 SYN12021020300774 2102-00-005219 唯一身份 455736 38

第二个查询返回:

记录_DT
2021-10-20 11:36:02.670
2021-10-20 11:35:29.263
2021-10-20 11:34:59.583

我想用第二个 SELECT 替换 record_dt。

我知道我必须将它附加到第一个查询中,我只是不知道如何......

哪种方法最好做到这一点?

标签: sqlsql-servertsql

解决方案


如果您可以将 LIMIT 1 限制为您的 select 子句,则可以使用如下查询:

SELECT r.record_id,
       r.part_id,
    CASE
        WHEN r.PROCESS_STEP_LIST_ID IN (21 , 22, 23) THEN 
            (SELECT DISTINCT RECORD_DT FROM synfact_record WHERE PROCESS_STEP_LIST_ID IN (21,22,23) ORDER BY RECORD_DT DESC LIMIT 1)
        ELSE r.RECORD_DT
    END as record_dt,
       a.association_part_a,
       a.association_part_b,
       a.association_type,
       a.association_id,
       r.product_id
FROM   dbo.synfact_association AS a
       INNER JOIN dbo.synfact_record AS r
               ON a.record_id = r.record_id


推荐阅读