我想在tblAssets上结合使用CASE
语句和LIKE LEFT JOIN
。我在case语句的LIKE
之后使用THEN
遇到麻烦。下面,我有两个有效的单独查询。我需要像在第二个查询中一样,将第一个查询用于多种情况,但是当它们彼此相似时就加入。能做到吗?
第一个查询
SELECT tblAssets.AssetName, tblDBFeedImport.DEAL_SRC_NAME
FROM tblDBFeedImport
LEFT JOIN tblAssets
ON tblDBFeedImport.DEAL_SRC_NAME LIKE + '%' + tblAssets.AssetName + '%'
第二个查询
SELECT DISTINCT tblAssets.AssetID, tblAssets.AssetName, tblAssets.LS2Name, tblDBFeedImport.DEAL_SRC_NAME, tblDBFeedImport.FACILITY_NAME, tblAssets.PipelineStatusID
FROM tblDBFeedImport
LEFT JOIN tblAssets
ON tblDBFeedImport.DEAL_SRC_NAME =
CASE
WHEN tblAssets.AssetName LIKE '%' + tblDBFeedImport.DEAL_SRC_NAME + '%' THEN tblAssets.AssetName
WHEN tblAssets.LS2Name LIKE '%' + tblDBFeedImport.DEAL_SRC_NAME + '%' THEN tblAssets.LS2Name
END
WHERE 1=1
AND tblAssets.PipelineStatusID=6
ORDER BY tblAssets.AssetName, tblDBFeedImport.DEAL_SRC_NAME, tblAssets.LS2Name
答案 0 :(得分:2)
您还可以使用CASE生成一个数字,然后检查该数字。
SELECT DISTINCT
ass.AssetID, ass.AssetName, ass.LS2Name,
imp.DEAL_SRC_NAME, imp.FACILITY_NAME,
ass.PipelineStatusID
FROM tblDBFeedImport imp
LEFT JOIN tblAssets ass
ON CASE
WHEN ass.AssetName LIKE '%' + imp.DEAL_SRC_NAME + '%' THEN 1
WHEN ass.LS2Name LIKE '%' + imp.DEAL_SRC_NAME + '%' THEN 2
ELSE 0
END > 0
WHERE ass.PipelineStatusID = 6
ORDER BY ass.AssetName, imp.DEAL_SRC_NAME, ass.LS2Name
但是为此使用OR可能会更快
...
LEFT JOIN tblAssets ass
ON ( ass.AssetName LIKE '%' + imp.DEAL_SRC_NAME + '%'
OR ass.LS2Name LIKE '%' + imp.DEAL_SRC_NAME + '%')
...