ВСТРОЕННОЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ В ЛЕВОМ СОЕДИНЕНИИ в SAS - PullRequest
0 голосов
/ 25 сентября 2019

Я ДЕЙСТВИТЕЛЬНО оценил бы вашу помощь в решении этой проблемы.Я не являюсь разработчиком SAS (Oracle SQL - мой концерт), поэтому я надеюсь, что вы, гений, можете мне помочь :) Я выполнил следующий код в SQL Developer, и он дает нужные мне результаты;Поставщики с или без специальностей и только специальностей, где источник от <> до 'NA'.Я пробовал несколько других способов получения только тех результатов, которые мне нужны, и это единственный код, который его выполняет (пока).Однако, когда я запускаю это в SAS, он выдает ошибку после LEFT JOIN и «Sub» INNER JOIN - SAS говорит, что ожидал «ON».

INNER JOIN schemaA.providers prov
        ON claims.prov_key = prov.prov_key 
 LEFT JOIN schemaA.specialties spec
     INNER JOIN schemaA.source src
             ON spec.src_key = src.src_key
            AND src.src_cd <> 'NA'
       ON prov.prov_key = spec.prov_key 

1 Ответ

0 голосов
/ 25 сентября 2019

SAS, вероятно, умнее с синтаксисом JOIN.Выше приведен стандартный SQL и допускается.Но я очень не одобряю это.Вы можете попробовать использовать скобки:

INNER JOIN
schemaA.providers prov
ON claims.prov_key = prov.prov_key LEFT JOIN
(schemaA.specialties spec INNER JOIN
 schemaA.source src
 ON spec.src_key = src.src_key AND src.src_cd <> 'NA'
)
ON prov.prov_key = spec.prov_key 

Это может помочь парсеру.В противном случае, это, вероятно, делает то, что вы хотите:

INNER JOIN
schemaA.providers prov
ON claims.prov_key = prov.prov_key LEFT JOIN
schemaA.specialties spec
ON prov.prov_key = spec.prov_key LEFT JOIN
schemaA.source src
ON spec.src_key = src.src_key AND src.src_cd <> 'NA'

Эта версия, безусловно, проще для людей, чтобы разобрать.Процессору SAS также должно быть проще разбирать.

Примечание. Эта версия не точно и не совпадает с вашей версией.Примечательно, что он обрабатывает пропущенные совпадения в spec и src немного по-другому.Однако, я предполагаю, что это функционально эквивалентно вашим данным.

РЕДАКТИРОВАТЬ:

Точное совпадение с логикой будет:

INNER JOIN
schemaA.providers prov
ON claims.prov_key = prov.prov_key LEFT JOIN
(SELECT spe.prov_key, . . .  -- list the columns you want here
 FROM schemaA.specialties spec INNER JOIN
      schemaA.source src
      ON spec.src_key = src.src_key AND src.src_cd <> 'NA'
) spec
ON prov.prov_key = spec.prov_key 
...