如何解决使用 WHERE 子句排除数据但仅在某些条件下
我有下面的代码可以工作,但我想知道是否有更好的方法来做到这一点,或者这种方法是否令人不悦?
我基本上想使用前 3 个 where 子句返回所有数据,然后如果 US Fixed Income 策略包含 Global 然后隐藏平均价格行。
SELECT
[vw_Characteristics].[Classification_Category],[vw_Characteristics].[Portfolio_Value],[vw_Characteristics].[Index_Value],[vw_Characteristics].[Sort_Order_PChars]
FROM [dbo].[vw_Characteristics]
WHERE [vw_Characteristics].[ACCOUNT_NUMBER] = @Account
AND [vw_Characteristics].[AS_OF_DATE] = @Date
AND [vw_Characteristics].[Sort_Order_PChars] IS NOT NULL
AND CASE
WHEN @Domicile = 'US'
AND @Capability = 'Fixed Income'
AND @Strategy LIKE '%Global%'
AND [vw_Characteristics].[Classification_Category] = 'Average Price'
THEN 0
ELSE 1
END = 1
ORDER BY [Sort_Order_PChars] ASC
DROP TABLE #elink
解决方法
在 CASE
子句中使用 WHERE
表达式几乎没有任何意义,主要是因为 CASE
正在评估可能只是在 WHERE
中的条件逻辑子句作为原生标准。
以下应该与您的 equery 类似:
SELECT
[vw_Characteristics].[Classification_Category],[vw_Characteristics].[Portfolio_Value],[vw_Characteristics].[Index_Value],[vw_Characteristics].[Sort_Order_PChars]
FROM [dbo].[vw_Characteristics]
WHERE [vw_Characteristics].[ACCOUNT_NUMBER] = @Account
AND [vw_Characteristics].[AS_OF_DATE] = @Date
AND [vw_Characteristics].[Sort_Order_PChars] IS NOT NULL
AND NOT ( @Domicile = 'US'
AND @Capability = 'Fixed Income'
AND @Strategy LIKE '%Global%'
AND [vw_Characteristics].[Classification_Category] = 'Average Price'
)
ORDER BY [Sort_Order_PChars] ASC
我认为 CASE
具有潜力的唯一时间是案例逻辑更改要过滤的字段或条件的顺序,但即使如此,也必须是非常复杂的逻辑才能证明这种情况句法。它不会使查询更高效,但从长远来看,它可能会提高它的可维护性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。