У меня есть типичная установка RDMS, где записи в основной таблице могут иметь дополнительные записи в связанной таблице через соединение M2M. Я пытаюсь PIVOT эти данные, но в случаях, когда нет отношения, я хочу вернуть значение по умолчанию. Соединение, которое у меня есть ниже, возвращает NULL.
select *
from
(
SELECT s.Biz_Name, la.Name AS Association, ISNULL(i.Location, 'Default') as Location
FROM dbo.ShopAssociations sa
INNER JOIN dbo.LookupAssociations la
ON sa.AssociationID = la.AssociationID
RIGHT JOIN dbo.Basic_Shop_Info s
ON sa.ShopID = s.ShopID
INNER JOIN dbo.Images i
ON la.ImageID = i.ImageID
) DataTable
PIVOT
(
min(Location)
for association in
([OnCall],[OCGuy],[ASCLogo],[ASC_OtherSt],[ASE],[AASP],[AASP_PA],
[ASE_BlueSeal],[AAA],[AAA-B],[ASA],[ATRA],[ICAR],[CAA],[ACDelco],
[Cert],[ASC],[BBB],[Goodyear],[Limos],[RVs],[Bosch],[NARSA],
[DiscTire],[BigO],[Tires],[Firestone],[ASCCA],[JustTires],[ASE_Blue])
) PivotTable
Вывод выглядит так:
BizName OnCall OCGuy ASCLogo ASC_OtherSt ASE ...
"Wonderful Biz" somevalue somevalue NULL somevalue NULL
Я пытаюсь добиться того, чтобы дочерняя запись не существовала в INNER JOIN от Basic_Shop_Info до ShopAssociations, и мы получаем «По умолчанию» вместо NULL. Я пробовал ISNULL (), Coalesce () и даже оператор CASE, все с одинаковыми результатами.