我试图根据 [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
(
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。)