У меня есть 3 таблицы:SQL Server Условный Объединить две таблицы
TableA(IDRem, IDPed, IDOP)
TableB(IDOP, IDPed)
TableC(IDPed, InvoiceDate)
Мне нужно выбрать, чтобы присоединиться к записи TableA и TableC, но есть два возможных условия:
- IF IDPed на TableA IS NOT NULL, затем присоединяется непосредственно к TableC по IDPed
- ID IDPed на TableA IS NULL, затем присоединяется к TableB по IDOp, а затем присоединяется к TableB to TableC по IDPed
До сих пор я стараюсь это:
SELECT
TableA.*
,(CASE WHEN TableC.InvoiceDate IS NULL
THEN TableC2.InvoiceDate
ELSE TableC.InvoiceDate
END) AS InvoiceDate
FROM
TableA
LEFT JOIN TableC on TableA.IDPed = TableC.IDPed
LEFT JOIN TableB on TableB.IDOp = TableA.IDOp
INNER JOIN TableC as TableC2 on TableC2.IDPed = TableB.IDPed
Проблема с этим состоит в том, что каждое поле о TABLEA Я хочу, чтобы включить в выбор мне нужно сделать дело ... когда, чтобы определить, происхождение - tableA или TableA2.
Есть ли лучший способ сделать это? Благодаря!
mmmm i never use Cross Apply before, можете ли вы дать базовый образец о том, как его использовать в этом случае? благодаря! – ericpap
Я добавил быстрый пример (отказ от ответственности, который я не проверял, так что это может быть не идеально). – garryp
Посмотрите на эту статью: http://sqlserverplanet.com/sql-2005/cross-apply-explained – garryp