Kor03d

Untitled

May 30th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- CREATE TABLE map_auto AS
  2.     WITH unmapped AS (
  3.             SELECT DISTINCT
  4.                 d.prod_prd_id,
  5.                 regexp_replace(d.prd_name, ' (\d+) (\d+ ?(MG|MCG|G(?!EL)|UI|IU))', ' \1.\2', 'g') AS fixed_name,
  6.                 x.concept_code as component
  7.             FROM belg_source d
  8.             JOIN prod_to_ing c ON c.prod_prd_id = d.prod_prd_id
  9.             join drug_concept_stage x on
  10.                 c.prod_prd_id || ':' || c.comp_number = x.concept_name and
  11.                 x.concept_class_id = 'Ingredient'
  12.             WHERE
  13.                 d.prod_prd_id NOT IN
  14.                     (
  15.                         SELECT drug_concept_code
  16.                         FROM ds_stage
  17.                     )
  18.                 AND d.prd_name NOT IN
  19.                     (
  20.                         SELECT prd_name
  21.                         FROM devices_mapped
  22.                     )
  23.                 AND regexp_match (d.prd_name, '(X| )\d+ ?(MCG|MG|G(?!EL))( |$)') is not null
  24.                 AND (ARRAY(SELECT unnest(regexp_matches(d.prd_name, '((?:\d+)\.?(?:\d+)? ?(?:MCG|MG|G(?!EL)|UI|IU) )', 'g')))) [3] IS NULL
  25.             ),
  26.         list AS ( --only 1 or 2 ingredient drugs can be processed this way; more is unreliable
  27.             SELECT prod_prd_id
  28.             FROM unmapped
  29.             GROUP BY prod_prd_id
  30.             HAVING count(component) < 3
  31.             )
  32.  
  33. SELECT DISTINCT
  34.     u.prod_prd_id,
  35.     u.fixed_name,
  36. -- amount 1
  37.     substring (u.fixed_name, '[\d\.]+(?= ?(MG|MCG|G(?!EL)|UI|IU))') :: float AS a1,
  38. -- unit 1
  39.     substring (u.fixed_name, '[\d\.]+ ?(MG|MCG|G(?!EL)|UI|IU)') AS u1,
  40. -- amount 2
  41.     regexp_matches(u.fixed_name, '[\d\.]+(?= ?(MG|MCG|G(?!EL)|UI|IU))', 'g') AS a2,
  42. -- unit 2
  43. --  lower(substring((ARRAY(SELECT unnest(regexp_matches(u.fixed_name, '(?:(\d|\.)+)?(?:\d+ ?(?:MCG|MG|G(?!EL)|UI|IU))', 'g')))) [2], '[A-Z]+')) AS u2,
  44.     min(u.component) OVER (PARTITION BY u.prod_prd_id) AS i1,
  45.     max(u.component) OVER (PARTITION BY u.prod_prd_id) AS i2
  46. FROM unmapped u
  47. WHERE prod_prd_id IN (
  48.         SELECT *
  49.         FROM list
  50.         );
Advertisement
Add Comment
Please, Sign In to add comment