Упростить несколько объединений - PullRequest
0 голосов
/ 31 марта 2020

У меня есть таблица Claims с 70 столбцами, 16 из которых содержат коды диагностики. Коды ничего не значат, поэтому мне нужно вытащить описания для каждого кода, расположенного в отдельной таблице.

Должен быть более простой способ получить эти описания кода:

-- This is the claims table
FROM 
    [database].[schema].[claimtable] AS claim

-- [StagingDB].[schema].[Diagnosis] table where the codes located
-- [ICD10_CODE] column contains the code
LEFT JOIN 
    [StagingDB].[schema].[Diagnosis] AS diag1 ON claim.[ICDDiag1] = diag1.[ICD10_CODE]
LEFT JOIN 
    [StagingDB].[schema].[Diagnosis] AS diag2 ON claim.[ICDDiag2] = diag2.[ICD10_CODE]
LEFT JOIN 
    [StagingDB].[schema].[Diagnosis] AS diag3 ON claim.[ICDDiag3] = diag3.[ICD10_CODE]
-- and so on, up to ....
LEFT JOIN 
    [StagingDB].[schema].[Diagnosis]AS diag16 ON claim.[ICDDiag16] = diag16.[ICD10_CODE]

-- reported column will be [code_desc]
-- ie: 
-- diag1.[code_desc] AS Diagnosis1
-- diag2.[code_desc] AS Diagnosis2
-- diag3.[code_desc] AS Diagnosis3
-- diag4.[code_desc] AS Diagnosis4
-- etc.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вы можете go для UNPIVOT таблицы заявок, а затем присоединиться к таблице диагностики.

НАСТРОЙКА ТЕСТА

create table #claimTable(ClaimId INT, Diag1 VARCHAR(10), Diag2 VARCHAR(10))
CREATE table #Diagnosis(code VARCHAR(10), code_Desc VARCHAR(255))

INSERT INTO #ClaimTable
VALUES (1, 'Fever','Cold'), (2, 'Headache','toothache');

INSERT INTO #Diagnosis
VALUEs ('Fever','Fever Desc'), ('cold','cold desc'),('headache','headache desc'),('toothache','toothache desc');

Запрос на выполнение

;WITH CTE_Claims AS
(SELECT ClaimId,DiagnosisNumeral, code
FROM #claimTable
UNPIVOT
(
code FOR DiagnosisNumeral in ([Diag1],[Diag2])
) as t
)
SELECT c.ClaimId, c.code, d.code_Desc
FROM CTE_Claims AS c
INNER JOIN #Diagnosis as d
on c.code = d.code

ResultSet

+---------+-----------+----------------+
| ClaimId |   code    |   code_Desc    |
+---------+-----------+----------------+
|       1 | Fever     | Fever Desc     |
|       1 | Cold      | cold desc      |
|       2 | Headache  | headache desc  |
|       2 | toothache | toothache desc |
+---------+-----------+----------------+
0 голосов
/ 31 марта 2020

Я думаю, что то, что вы делаете, уже правильно в данном сценарии.

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

i) Pivot Таблица заявок на эти 16 столбцов описания. ii) Присоединитесь к столбцу Pivoted с помощью [StagingDB].[schema].[Diagnosis]

. Другой способ может заключаться в том, чтобы поместить таблицу [StagingDB].[schema].[Diagnosis] в некоторую таблицу #temp вместо касания большого этапа 16 раз.

Но для анализа данных должно быть сделано, чтобы решить, если есть какой-либо способ.

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