我想知道如何使用基於CASE
或IF
的不同WHERE
子句。我更喜歡CASE
,因爲聲明的其餘部分很複雜,我不喜歡這種複雜性的想法在兩個地方只有一點點區別。但是,我知道案例僅用於值。我在下面複製了我的問題的簡單版本。使用兩個不同的where子句
本質上,我有三個表。第一個包含主信息(MasterTable)。第二個包含屬於主表(Table1)的一對多關係。第三個是選擇器列表,指示在這個實例中將使用表1中的哪些記錄。我希望Table2的最新記錄驅動從Table1中選擇的內容,優先於OrderNum上的SubID。
MasterTable | MasterID,OtherInfo
表1 | T1UniqueId,MasterID,SubID,Text,OrderNum
表2 | T2UniqueId,MasterID,子ID,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'子句中,但不幸的是'CASE'不能以這種方式使用,它只是將'THEN'和'ELSE'的值輸出到嵌入表達式;你不能用它來輸出一個條件。 – DrCopyPaste
@DrCopyPaste謝謝。我確實知道這一點,但我不知道如何糾正它做我想要的。我用這個案例來說明不僅僅是一個解決方案。 – steventnorris