我目前在尝试对一些表运行查询时遇到问题。
下面是我正在尝试做的事情,我似乎就是不能让它工作。我还复制了constituent和gifts,向您展示软信用和礼物/constituents之间的关系
SELECT
Constituent.lookup_id,
Constituent.name,
SplitGifts.amount,
SplitGifts.giftaidamount
FROM
dbo.Gifts Gifts
INNER JOIN dbo.Constituent Constituent
ON Constituent.id = Gifts.constituent_id
INNER JOIN dbo.SplitGifts SplitGifts
ON SplitGifts.giftid = Gifts.id
LEFT JOIN dbo.SoftCredit SoftCredit
ON SoftCredit.giftid = Gifts.id
INNER JOIN dbo.Constituent Constituent_1
ON Constituent_1.id = SoftCredit.constituentid
INNER JOIN dbo.Gifts Gifts_1
ON Gifts_1.id = SoftCredit.giftid
INNER JOIN dbo.Package Package
ON Package.id = SplitGifts.packageid
WHERE
Package.lookup_id = N'CORPCHAL'
基本上,我想要的金额和gift_aid_amount从SplitGifts成分名称和lookup_id从组成显示所有礼物,但是,如果存在软积分为该礼物,我需要它通过SoftCredit表-> Gifts -> SplitGifts ->字段获得相同的字段
发布于 2019-05-15 11:27:21
如果下面的查询有效,您可以尝试一下。
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'
它在SoftCredit
中连接回礼物引用上的表Gifts
(使用别名Gifts_1
),如果没有SoftCredit
,则连接回表本身。
表Constituent
以类似的方式联接:它根据SoftCredit.constituentid
的值联接,当为NULL时,它回退到Gifts_1.constituent_id
。
所有关于礼物的后续加入都应该引用Gifts_1
。
不过我还没有测试过它。但它可能会为您提供一个可能的解决方案方向的提示。
https://stackoverflow.com/questions/56147023
复制