Saya memiliki tabel berikut di PostgreSQL 11.0

forms
ampoules, capsules, coated tablets, infusion ampoules, liquids, powders, tablets
capsules, coated tablets, powders, tablets, unspecified
coated tablets

Saya ingin mengganti string tertentu dalam nilai yang dipisahkan koma ini untuk setiap baris dan mendapatkan nilai yang berbeda pada akhirnya. Untuk misalnya tablet salut demi tablet, kapsul demi tablet, infus ampul demi ampul.

Keluaran yang diinginkan adalah:

forms_normalized
ampoules, liquids, powders, tablets
tablets, powders, unspecified
tablets

Saya tidak punya titik awal untuk menyelesaikan masalah ini. Bantuan apa pun sangat dihargai.

Terima kasih

0
rshar 12 Mei 2021, 16:45

1 menjawab

Jawaban Terbaik

Salah satu cara untuk melakukannya, adalah memperluas daftar yang dipisahkan koma ke "tabel", lalu menggabungkan kembali nilai-nilai yang berbeda dan mengganti yang Anda inginkan.

select d.id, 
       (select string_agg(distinct case t.form
                             when 'coated tablets' then 'tablets'
                             when 'infusion ampoules' then 'ampoules'
                             else t.form
                           end, ',')
        from regexp_split_to_table(d.forms, '\s*,\s*') as t(form))
from data d
1
a_horse_with_no_name 12 Mei 2021, 14:05