SQL Поиск нескольких столбцов для определенных значений - PullRequest
0 голосов
/ 26 марта 2019

У меня есть таблица диагностики, как показано ниже (только для примера). Есть 50 столбцов ICD10, как показано ниже.

+----+-------------+------+----------------+------+-----+------+-------+--------------+-------+
| ID | ICD10_Diag1 | POA1 | ICD10_Diag2    | POA2 | ... | .... | POA49 | ICD10_Diag50 | POA50 |
+----+-------------+------+----------------+------+-----+------+-------+--------------+-------+
| 1  | A234 - Flu  | Y    | B456 - Cough   | Y    |     |      | N     | A844 - Fever | N     |
+----+-------------+------+----------------+------+-----+------+-------+--------------+-------+
| 2  | A563 - Cold | Y    | I567 - Cardiac | Y    |     |      |       |              |       |
+----+-------------+------+----------------+------+-----+------+-------+--------------+-------+
| 3  | C354 - CHF  | N    |                |      |     |      |       |              |       |
+----+-------------+------+----------------+------+-----+------+-------+--------------+-------+

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

Найдите записи, которые содержат эти коды диагностики (A234, F384, I567) и их соответствующий POA равен 'Y'.Даже если найдено одно совпадение, игнорируйте оставшуюся часть диагноза, даже если есть совпадение.

SQL

Select * from myTable WHERE ('%A234%', '%F384%', '%I567%') IN (ICD10_Diag1, ICD10_Diag2, ICD10_Diag3, ICD10_Diag4)

Я знаю, что это неправильный способ сделать это, я пытаюсь найти альтернативу

Желаемый результат

1 A234-Flu 
2 I567 - Cardiac

1 Ответ

0 голосов
/ 26 марта 2019

Рекомендую отключить данные.Вы можете сделать это в запросе, используя apply, но лучше структурировать данные следующим образом:

select d.*
from diagnosis d cross apply
     (values (d.ICD10_Diag1, d.POA1),
             (d.ICD10_Diag2, d.POA2),
             . . . 
     ) v(ICD10_Diag, POA)
where v.ICD10_Diag in ('A234', 'F384', 'I567') 
      v.POA = 'Y';

Обратите внимание, что это может вернуть дубликаты.Простое решение - select distinct.

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