0

我确信这是一个愚蠢的问题,但是在阅读完所有内容后,我无法弄清楚为 Where 子句创建具有后备逻辑的存储过程的正确方法。

我有以下查询:

SELECT FeeName, Amount, Category, VariableName 
FROM client_rates WHERE state_abv = state_abvIN 
AND Purchase= purchaseIN AND Category= CategoryIN And client_id=client_idIN AND
agent_id=agent_idIN AND ((lender_id=lender_idIN AND county=countyIN) OR (lender_id=lender_idIN
AND
county='NA') OR (lender_id=1 AND county=countyIN) OR (lender_id=1 AND county='NA'));

因为我使用了 OR,所以它会返回一个匹配所有 4 个条件的集合。我想要的是通过条件“回退”。

这意味着我希望它返回一个集合,其中 (lender_id=lender_idIN AND County=countyIN) 返回一个值。但是,如果它返回一个 NULL 集,则尝试下一个条件集 (lender_id=lender_idIN AND County='NA') 等等。

我不认为 CASE 可以解决这个问题,我曾经使用嵌套的 IF EXIST 语句,该语句有效但强制每个查询运行两次(必须有比这更好的解决方案)。

任何建议,并感谢您的帮助。

4

1 回答 1

0

你的问题不清楚。我假设 ...IN 符号是参数而不是列,“NA”是 client_rates 中县的可能值,并且在 WHERE 的最后一个 AND 条件中,您希望返回行 where (...),否则where (...), else where (...) 等(CASE 表达式的计算结果只到第一个真 WHEN。)

SELECT FeeName, Amount, Category, VariableName 
FROM client_rates
WHERE state_abv=state_abvIN 
AND Purchase=purchaseIN AND Category=CategoryIN
AND client_id=client_idIN AND agent_id=agent_idIN
AND CASE WHEN (lender_id=lender_idIN AND county=countyIN) THEN 1
    WHEN (lender_id=lender_idIN AND county='NA') THEN 1
    WHEN (lender_id=1 AND county=countyIN) THEN 1
    ELSE (lender_id=1 AND county='NA')
    END;

PS:但这与以下查询不同:当 CASE 之前的所有内容都匹配时,如果没有找到 lender_idIN,则为 lender_id 返回 1(无论是否有 lender_id=1),如果没有countyIN找到然后返回县的'NA'(无论是否有县='NA')。(这可能涉及 'NA' 不是 client_rates 中县的可能值。)当他们给出不同的结果时:如果没有找到 lender_idIN 但没有为 1 的 client_rates lender_id 值和/或如果没有找到 CountyIN 但没有client_rates 县值“NA”。然后第一个查询将返回一个空表,但第二个查询返回 1 表示贷方 ID 和/或“NA”表示县。让你的“意义……”清楚!包括查询“

于 2014-11-08T01:45:38.707 回答