Когда имена таблиц или столбцов делают вещи очень горизонтальными, я использую псевдонимы. Таким образом, в ваших утверждениях from и join я бы присваивал псевдоним NetRate_Quote_insur_quote как «nQuote», а «NetRate_Quote_insur_quote_locat» - как «loc».
Кроме того, для вещей, которые занимают более одной строки, мне нравится синтаксис colName = xyz.
Кроме того, мне нравятся слова 'case', выровненные с операторами 'when', 'else' и 'end', и, если возможно, операторы 'then', не соответствующие этим остальным.
Так бы это выглядело так:
select TransactionName =
CASE
WHEN ISNULL(loc.[Transaction], '') <> '' AND loc.EndorsementNumber = nQuote.EndorsementNumber THEN
CASE loc.[Transaction]
WHEN 'ADD' THEN 'Add'
WHEN 'DELETED' THEN 'Delete'
WHEN 'CHANGED' THEN 'Change'
WHEN 'New Quote' THEN 'Add'
ELSE
CASE
WHEN tblQuotes.OriginalQuoteGuid IS NULL OR nQuote.TypeofBusiness = 'Reinstate' THEN 'Add'
ELSE
CASE WHEN tblQuotes.QuoteStatusID = 12 THEN 'Delete'
ELSE 'No Change'
END
END
END
ELSE
CASE
WHEN tblQuotes.OriginalQuoteGuid IS NULL OR nQuote.TypeofBusiness = 'Reinstate' THEN 'Add'
ELSE
CASE
WHEN tblQuotes.QuoteStatusID = 12 THEN 'Delete'
ELSE 'No Change'
END
END
END
Кроме того, я часто нахожу полезным использовать повторяющуюся логику в выражениях перекрестного применения. Так что если после ваших операторов объединения вы можете добавить что-то вроде:
cross apply (select
endorsed =
case
when ISNULL(loc.[Transaction], '') <> '' AND loc.EndorsementNumber = nQuote.EndorsementNumber then 1
else 0
end,
nullOrReinstate =
case
when tblQuotes.OriginalQuoteGuid IS NULL OR nQuote.TypeofBusiness = 'Reinstate' then 1
else 0
end
) ap
тогда вы можете использовать эти столбцы в своей логике. В конце концов, если я не ошибся, я считаю, что ваше заявление по делу может быть неоправданным и будет выглядеть так:
select TransactionName =
CASE
WHEN endorsed = 1 and loc.[Transaction] in ('add', 'deleted', 'changed') then loc.[transaction]
WHEN endorsed = 1 and loc.[transaction] = 'New Quote' THEN 'Add'
WHEN endorsed = 1 and nullOrReinstate = 1 THEN 'Add'
WHEN endorsed = 1 and tblQuotes.QuoteStatusID = 12 THEN 'Delete'
WHEN nullOrReinstate = 1 THEN 'Add'
WHEN tblQuotes.QuoteStatusID = 12 THEN 'Delete'
ELSE 'No Change'
END