Я хотел бы знать, как использовать другой пункт WHERE
на основе CASE
или IF
. Я бы предпочел CASE
, так как остальная часть утверждения сложна, и мне не нравится идея о том, что эта сложность находится в двух местах с незначительной разницей. Тем не менее, я знаю, что случаи используются только для значений. Я воспроизвел простую версию моей проблемы ниже.Использование двух разных статей:
По существу, у меня есть три стола. Первая содержит основную информацию (MasterTable). Второй содержит отношение «один ко многим», принадлежащее главной таблице (Таблица 1). Третий - это список селекторов, указывающих, какие из записей в таблице 1 должны использоваться в этом случае. Я хочу, чтобы самая последняя запись таблицы2 управляла тем, что выбрано в таблице 1, причем приоритет отдается SubID над OrderNum.
MasterTable | MasterID, OtherInfo
Таблица1 | T1UniqueId, MasterID, SubID, Текст, 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
Если это будет работать вам все равно потребуется дополнительный 'AND' перед' СЛУЧАЙ 'в вашем' WHERE'-clause, но, к сожалению, 'CASE' не может использоваться таким образом, он просто просто выводит значения из' THEN' и 'ELSE' в выражение внедрения; вы не можете использовать его для вывода условия. – DrCopyPaste
@DrCopyPaste Спасибо. Я знал это немного, но я не уверен, как исправить это, чтобы делать то, что я хочу. Я использовал случай, чтобы проиллюстрировать больше, чем предложить решение. – steventnorris