【发布时间】:2013-10-03 18:48:09
【问题描述】:
我想知道如何使用基于CASE 或IF 的不同WHERE 子句。我更喜欢CASE,因为该语句的其余部分很复杂,而且我不喜欢这种复杂性在两个地方只有微小差异的想法。但是,我知道案例仅用于值。我在下面复制了我的问题的一个简单版本。
基本上,我有三张桌子。第一个包含主信息(MasterTable)。第二个包含属于主表(Table1)的一对多关系。第三个是选择器列表,指示要在此实例中使用 Table1 中的哪些记录。我希望 Table2 的最新记录驱动从 Table1 中选择的内容,优先考虑 SubID 而不是 OrderNum。
主表 | MasterID、其他信息
表 1 | T1UniqueId、MasterID、SubID、Text、OrderNum
表2 | T2UniqueId、MasterID、SubID、OrderNum、日期
SELECT MasterID, OtherInfo, SubID
FROM MasterTable
OUTER APPLY(
SELECT TOP 1 SubID FROM Table1
WHERE Table1.MasterID=MasterTable.MasterID
CASE
WHEN
(
SELECT TOP 1 SubID FROM Table2
WHERE Table2.MasterID=MasterTable.MasterID
ORDER BY Date DESC
) Is NULL
THEN Table1.OrderNum=
(
SELECT TOP 1 OrderNum
FROM Table2
WHERE Table2.MasterId=MasterTable.MasterId
ORDER BY Date DESC
)
ELSE Table1.SubId=
(
SELECT TOP 1 SubId
FROM Table2
WHERE Table2.MasterId=MasterTable.MasterId
ORDER BY Date DESC
)
END
) SubData
【问题讨论】:
-
如果这可行,您仍然需要在
CASE之前在WHERE子句中添加一个额外的AND,但不幸的是CASE不能这样使用,它只是输出值从THEN和ELSE到嵌入表达式;你不能用它来输出条件。 -
@DrCopyPaste 谢谢。我确实知道这一点,但我不知道如何纠正它来做我想要的。我用这个案例来说明不仅仅是建议一个解决方案。
标签: tsql if-statement case where apply