我需要匹配一组精确的数字然后替换为' 1'在另一栏中,我可以使用CASE语句执行此操作,如下所示
SELECT
CASE PT_6 WHEN '75' THEN '1' ELSE '' END AS PT_6_1
FROM edrn.pca_patient
WHERE irid = 4395;
然而,PT_6列是从应用程序的复选框填充的,因此当选择多个复选框时,数据为86,75,81。
我需要一种方法来拉出我从字符串输入的值,并将其替换为不同列中的1,例如PT_6_1。我玩了一些REGEXP,但不确定我是否可以在CASE中做到这一点。
在需要它的其他列中 - 它们不是全部2位数,有些是3位所以我想如果我使用某种形式的LIKE,我可以错误地从175中取出75例
一些示例数据和更多信息,对于此示例,coumn PT_6有6个可能的复选框。我需要在单独的列中将每个复选框作为1或0进行勾选或不进行,因此列为PT_6_1,PT_6_2等等。
来自4条记录的当前数据
IRID PT_6
4395 85,75,87
3183 85,87
3219 85
2180 86
所以说我希望将87表示为PT_6_3列,如果没有匹配则为NULL,则数据将为
IRID PT_6_1 PT_6_2 PT_6_3 PT_6_4 PT_6_5 PT_6_6
4395 null null 1 null null null
3183 null null 1 null null null
3219 null null null null null null
2180 null null null null null null
谢谢, 艾伦
答案 0 :(得分:2)
回答问题的原始版本:
SELECT TRIM( BOTH ',' FROM REPLACE( ','||PT_6||',', ',75,', ',1,' ) ) AS PT_6_1
FROM edrn.pca_patient
WHERE irid = 4395;
回答问题的更新版本:
SELECT irid,
CASE WHEN ','||PT_6||',' LIKE '%,75,%' THEN 1 END AS PT_6_contains_75,
CASE WHEN ','||PT_6||',' LIKE '%,85,%' THEN 1 END AS PT_6_contains_85,
CASE WHEN ','||PT_6||',' LIKE '%,87,%' THEN 1 END AS PT_6_contains_87
FROM edrn.pca_patient