簡體   English   中英

SQL搜索特定值的多個列

[英]SQL Search multiple columns for certain values

我有一個如下所示的診斷表(僅舉例)有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

我建議取消隱藏數據。 您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM