Вы можете попробовать, если работает приведенный ниже запрос.
SELECT
Constituent.lookup_id,
Constituent.name,
SplitGifts.amount,
SplitGifts.giftaidamount
FROM
dbo.Gifts Gifts
LEFT JOIN dbo.SoftCredit SoftCredit ON SoftCredit.giftid = Gifts.id
INNER JOIN dbo.Gifts Gifts_1 ON
Gifts_1.id = SoftCredit.giftid OR
(SoftCredit.giftid IS NULL AND Gifts_1.id = Gifts.id)
INNER JOIN dbo.Constituent Constituent ON
Constituent.id = SoftCredit.constituentid OR
(SoftCredit.constituentid IS NULL AND Constituent.id = Gifts_1.constituent_id)
INNER JOIN dbo.SplitGifts SplitGifts ON SplitGifts.giftid = Gifts_1.id
INNER JOIN dbo.Package Package ON Package.id = SplitGifts.packageid
WHERE
Package.lookup_id = N'CORPCHAL'
Он возвращается к таблице Gifts
(используя псевдоним Gifts_1
) для ссылки на подарок в SoftCredit
или к себе, если естьнет SoftCredit
.
Таблица Constituent
объединяется аналогичным образом: она включается со значением SoftCredit.constituentid
, а когда NULL, возвращается к Gifts_1.constituent_id
.
ВсеСледующие объединения в отношении подарка должны относиться к Gifts_1
тогда.
Я еще не проверял это.Но это может дать вам подсказку о возможном направлении решения.