包含基于字段值的连接参数

问题描述 投票:0回答:1

我试图根据 [CURR MNBR] 的值进行条件连接,因此如果 [CURR MNBR] 为 NULL,那么我想使用 [Config] = 'Stock',否则使用 [CURR MBR] IN.. .

SELECT
    mp.[AID],
    mp.[MNumber],
    mp.[pID],
    r.[AID],
    r.[CURR MCNBR],
    r.[DECIMAL],
    mp.[Thickness],
    r.[WIDTH],
    mp.[Width],
    r.[LENGTH],
    mp.[Length],
    r.[SAE],
    mp.[Grade],
    mp.[Config],
    mp.[Style]
  FROM [raw_customer_external_no_sw] r
  LEFT JOIN [merged_products] mp ON
    CAST(r.[DECIMAL] AS decimal(20,4)) = CAST(mp.[Thickness] AS decimal(20,4)) AND
    CAST(r.[WIDTH] AS decimal(20,4)) = CAST(mp.[Width] AS decimal(20,4)) AND
    CAST(r.[LENGTH] AS decimal(20,4)) = CAST(mp.[Length] AS decimal(20,4)) AND
    IIF( [CURR MNBR] IS NOT NULL, r.[CURR MNBR] IN ( SELECT value FROM STRING_SPLIT(mp.[MNumber],','), mp.[Config] = 'Stock' ) ) AND
    r.[SAE] = mp.[Grade] AND
    mp.[Style] = 'SW10:FG'
  GROUP BY
    mp.[pID], mp.[Length], mp.[Config], mp.[Width], mp.[Style], mp.[AID], mp.[MNumber],
    r.[AID], r.[CURR MNBR], [DECIMAL], [WIDTH], [LENGTH],[SAE]
ORDER BY [AID]

我也尝试过:

CASE
    WHEN [CURR MNBR] IS NOT NULL THEN mp.[Config] = 'Stock'
    ELSE r.[CURR MNBR] IN ( SELECT value FROM STRING_SPLIT(mp.[MNumber],',')
END AND

我想我最接近的是:

(
    mp.[Config] = (
    CASE
        WHEN r.[CURR MCNBR] IS NULL THEN  'Stock'
        ELSE IS NOT NULL -- mp.[Config] Would  need to match any value if r.[CURR MNBR] IS NOT NULL, mp.[Config] has no NULL values
    END ) OR
    r.[CURR MCNBR] IN ( SELECT value FROM STRING_SPLIT(mp.[MNumber],',') )
) AND
r.[AID] = (
CASE
    WHEN r.[AID] IN ( SELECT value FROM STRING_SPLIT(mp.[AID],',') ) THEN ( SELECT value FROM STRING_SPLIT(mp.[AID],',') )
    ELSE '' -- r.[AID] would need to match any value if not found in mp.[AID].  r.[AID] does have NULL values
END ) AND
sql join case
1个回答
0
投票
(
  r.[CURR MNBR] IS NULL
  AND
  mp.[Config] = 'Stock'
)
OR
(
  r.[CURR MNBR] IS NOT NULL
  AND
  r.[CURR MNBR] IN ( SELECT value FROM STRING_SPLIT(mp.[MNumber],',')
)

(实际上不需要“not null”行,因为只有当值不为 NULL 时 IN 才为 true。)

© www.soinside.com 2019 - 2024. All rights reserved.