Объединение таблиц в SQL - PullRequest
       5

Объединение таблиц в SQL

0 голосов
/ 07 ноября 2019

У меня есть две таблицы, таблица 1) ED_NOTES_MASTER и таблица 2) CPT_Master.

Каждая таблица имеет несколько записей на Pt_FIN (ID). Например, данные таблицы 1 выглядят следующим образом:

 Pt_FIN     Result_title_text     result
   1               PowerNote       test string 1.....
   1               Charges         test string 2.....
   1               Procedure       test string 3.....

ШАГ 1: я хочу создать две переменные ([Scribe Present], [Critical Care Note]) с использованием таблицы 1, и каждая из них будет связана с уникальнымID и сделать это, я написал следующий код:

 Select
 PT_FIN, [Scribe Critical Care],
   CASE WHEN ([Scribe Critical Care] like '%acting as scribe%')Then '1' Else '0' End [Scribe Present],
   CASE WHEN ([Scribe Critical Care] like '%9929%')Then '1' Else '0' End [Critical Care Note]
 FROM 
 (
 SELECT DISTINCT ST2.[Pt_fin],

 SUBSTRING(
    (
        SELECT ','+ST1.[Result] AS [text()]
        FROM [ED_NOTES_MASTER] ST1
        WHERE ST1.PT_FIN = ST2.PT_FIN AND (ST1.RESULT_TITLE_TEXT = 'ED Physician Charges' OR NOTE_TYPE like '%PowerNote%') AND (TRACKING_GROUP like '%EDU%')
              Order BY PT_FIN 
        FOR XML PATH ('')
    ), 1, 30000) [Scribe Critical Care]
 FROM [ED_NOTES_MASTER]  ST2 
 Where RESULT_DT_TM > @StartDate and RESULT_DT_TM < @EndDate AND (TRACKING_GROUP like '%EDU%') 

Вывод этого кода процедуры следующие:

 Pt_FIN     [Scribe Critical Care]   [Scribe Present]   [Critical Care Note]
   1               test string....        1                     1
   2               test string....        0                     1
   3               test string....        1                     0

ШАГ 2: Я хотел бы объединить эту таблицу /код с таблицей 2) CPT_Master, где данные имеют несколько записей на ребро и выглядят так:

 Pt_FIN       CPT
   1         99291    
   1         14623   
   1         86436 

При объединении данных, полученных из кода 1, с CPT_Master, я хочу сохранить каждую запись из таблицы кода 1 иконкатенировать переменную CPT из CPT_Master и создать переменную (1/0), если переменная конкатенации CPT содержит «9929». Например, я хочу, чтобы конечный результат выглядел следующим образом:

 Pt_FIN     [Scribe Critical Care]   [Scribe Present]   [Critical Care Note]  [CC Billed]
   1               test string....        1                     1              0
   2               test string....        0                     1              1
   3               test string....        1                     0              1

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

 USE EMTCQIData

 DECLARE @StartDate Date
 DECLARE @EndDate Date

 Set @StartDate = '09/01/2019'
 Set @EndDate = '10/01/2019'


 Select *, 
 CASE WHEN ([Critical Billed] like '%9929%')Then '1' Else '0' End [Critical Care Note]
 FROM 
 (
 SELECT DISTINCT CPT.[fin],
 SUBSTRING(
    (
        SELECT ','+CPT1.[CPT] AS [text()]
        FROM CPT_Master CPT1
        WHERE CPT1.FIN = CPT.FIN 
              Order BY FIN 
        FOR XML PATH ('')
    ), 1, 30000) [Critical Billed]
 FROM CPT_Master  CPT 

 Right JOIN
 ( 
 Select
 PT_FIN, [Scribe Critical Care],
 CASE WHEN ([Scribe Critical Care] like '%acting as scribe%')Then '1' Else '0' End [Scribe Present],
 CASE WHEN ([Scribe Critical Care] like '%9929%')Then '1' Else '0' End [Critical Care Note]
 FROM 
 (
 SELECT DISTINCT ST2.[Pt_fin],

SUBSTRING(
    (
        SELECT ','+ST1.[Result] AS [text()]
        FROM [ED_NOTES_MASTER] ST1
        WHERE ST1.PT_FIN = ST2.PT_FIN AND (ST1.RESULT_TITLE_TEXT = 'ED Physician Charges' OR NOTE_TYPE like '%PowerNote%') AND (TRACKING_GROUP like '%EDU%')
              Order BY PT_FIN 
        FOR XML PATH ('')
    ), 1, 30000) [Scribe Critical Care]
 FROM [ED_NOTES_MASTER]  ST2 
 Where RESULT_DT_TM > @StartDate and RESULT_DT_TM < @EndDate AND (TRACKING_GROUP like '%EDU%') 
) sub
) AS ST2 ON CPT.FIN= ST2.[Pt_fin] 
) sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...