为了使一些新模式与旧模式相匹配,我不得不做一些我认为可以以更好的方式完成的丑陋扭曲。作为参考,我在这里询问了有关此匹配过程的另一个问题:从相关子表创建视图
我在SQLFiddle中放置了一个简化的示例,但它的要点是,我可以看到协调这两个不同模式的唯一方法是对相同的值执行两个 case 语句,如下所示:
SELECT
CASE
WHEN n.FooBarStatusId = 1 OR n.FooBarStatusId = 2
THEN 1
ELSE 0
END as [IsFoo],
CASE
WHEN n.FooBarStatusId = 2
THEN 1
ELSE 0
END as [IsBar]
from Parent p
left join OldStuff o on p.ParentId = o.ParentId
left join NewStuff n on p.ParentId = n.ParentId
有没有更好和/或更有效的方法来完成同样的事情?在给定的查询中,这些案例语句可能会被命中数百次,我担心这个特定的逻辑。
我考虑过将这个特定逻辑(它是构建视图的更大查询的一部分)提取到临时表甚至是表值函数中,但即使我仍然无法想出使用的方法多个案例陈述。