У меня есть ситуация, когда у меня есть таблица Customer, и мне нужно найти номера документов из столбца, который структурирован как строка, где первые 4 символа представляют тип документа (например, «BILL000000000001», «PYMT000000000001») , Каждый из этих документов также имеет соответствующую дату документа. Я хочу получить CustomerNumber , где DocType равен BILL с max (DocDate) и вернуть CustomerNumber и DocDate . Эта часть довольно проста и не представляет трудностей.
Моя проблема в том, что у некоторых клиентов еще нет документа, начинающегося с BILL. Для них я хочу получить CustomerNumber и max (DocDate) , который соответствует другой строке XXXX в качестве первых 4 символов. По сути, мне нужно использовать какое-то условное выражение, которое выбирает либо CustomerNumber и max (DocDate) для типа BILL, либо Customer Number и max (DocDate) для типа записи XXXX . Проблема в том, что существует вероятность того, что для Клиента могут существовать типы BILL и XXXX . Если существует BILL , я хочу выбрать CustomerNumber и max (DocDate) для этого клиента. Однако, если существует тип XXXX , но нет документа типа BILL , мне нужны CustomerNumber и max (DocDate) для типа XXXX .
Я думал об использовании EXCEPT и UNION , но я не думаю, что какой-либо вариант действительно работает для меня. Вот мой SQL с ИСКЛЮЧИТЬ , если это вообще поможет.
select CustomerNumber, max(DocDate)
FROM Table1
where substring(DocumentNumber,1,4) = 'BILL'
group by CustomerNumber
EXCEPT
select CustomerNumber, max(DocDate)
from Table1
where substring(umDocumentNumber,1,4) = 'MISC'
group by CustomerNumber