0
TablePatient.Patient_ID(PK) 

TableProviders.Encounter (joins to PK) 

TableProviders.Provider_Type 

TableProviders.Provider_ID 

TableNames.Full_Name 

TableNames.Provider_ID (joins to Table Names) 

Я хочу, чтобы запрос, который будет давать, для всех Patient_IDs, тем Full_Name поставщика для каждого Provider ID.Лучшее решение, чем левое соединение подзапросов?

Есть около 30 provider_types.

Я сделал это уже с помощью левого соединения тонны левых соединений. Мне нужно много времени, и я думаю, что у меня есть трюк.

Любая помощь?

ответ

0

Хорошо, мой предыдущий ответ не соответствует на все, что вы имели в виду. Вы хотите повернуть таблицу, чтобы иметь на каждой строке один Patient_ID с каждым Full_name за каждые provider_type. Я предполагаю, что у каждого пациента есть только один провайдер для одного типа и не более; если больше, у вас будет более одной строки для каждого пациента, и в любом случае я не думаю, что это действительно возможно.

Вот мое решение с шарниром. Первая часть - сделать ее более понятной, поэтому я создаю таблицу под названием «TABLE_PATIENT» в подзапросе.

WITH TABLE_PATIENT AS 
( 
SELECT TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TableProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 
) 

SELECT * 
FROM TABLE_PATIENT 
PIVOT 
(
    min(Full_name) 
    for Provider_type in ([type1], [type2],[type3]) 
) AS PVT 

Так TABLE_PATIENT просто имеет много строк для каждого пациента, с одним поставщиком каждой строки, а стержень ставит все на одной строке. Скажите, если что-то не сработает.

Вам нужно написать каждый тип, который вы хотите, в [type1], [type2] и т. Д. Просто поместите их внутри [], никакой другой символ не нужен как «или что-то еще».

Если вы помещаете только некоторые типы, тогда запрос не будет отображать поставщиков других типов.

Сообщите мне, если что-то не работает.

+0

Отлично. Это отлично поработало. Благодарю. – JoshuaB

+0

Рад это слышать. Не могли бы вы подтвердить мой ответ? :) – BD01

+0

Есть ли способ добавить «CASE» к выходу? Я попробовал «*», а также «TABLE_PATIENT. *» И «T. *» после создания псевдонима «T» для «TABLE_PATIENT», но ничего из этого не получилось. – JoshuaB

0

Если я понимаю, что вы имеете в виду, вы просто хотите сгруппировать ответ с помощью идентификатора пациента, а затем идентификатора провайдера. Полное имя уникально для идентификатора провайдера?

Это должно быть что-то вроде

SELECT TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TablerProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 

Вы можете группировать по TableNames.Full_Name или выберите First(TableNames.Full_Name), например, если на самом деле полное имя является уникальным для поставщика ID.

Примечания: Я использовал SQL сервер синтаксис, может быть разногласия с Oracle ..

+0

Позвольте пояснить: каждый «идентификатор пациента» представляет собой ряд. Для каждого типа поставщика должен быть один столбец. Эти столбцы должны содержать «полное имя поставщика» – JoshuaB

+0

Существует ли только один идентификатор поставщика для одного типа поставщика? Или вы можете иметь несколько идентификаторов только для одного типа? Теперь, когда вы уточните, я понимаю лучше. Вам нужно сделать стержень. Просто ответьте, если связь между идентификатором провайдера и типом поставщика уникальна, и я могу написать код. В противном случае найдите «pivot» в Интернете. – BD01

+0

Существует несколько типов провайдеров и есть несколько идентификаторов провайдера. – JoshuaB

 Смежные вопросы

  • Нет связанных вопросов^_^