Advertisement
khangnguyen

Untitled

Nov 18th, 2013
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.55 KB | None | 0 0
  1. WITH
  2.   facility_cases AS (
  3.     SELECT raw_facility_cases.*, 'facility'::text AS SOURCE, (CASE role_order WHEN 0 THEN 'patient'
  4.                                                            WHEN 1 THEN 'student'
  5.                                                            WHEN 2 THEN 'requester'
  6.                                                            WHEN 3 THEN 'responder'
  7.                                            END) role_name
  8.       FROM (SELECT acf.case_id, fu.user_id, MAX(CASE fu.role_name WHEN 'patient' THEN 0
  9.                                                                   WHEN 'student' THEN 1
  10.                                                                   WHEN 'requester' THEN 2
  11.                                                                   WHEN 'responder' THEN 3
  12.                                                 END) role_order
  13.       FROM facility_user fu
  14.       LEFT JOIN access_case_facility acf
  15.       ON fu.facility_id = acf.facility_id
  16.       WHERE fu.user_id = 320
  17.       AND fu.role_name != 'patient'
  18.       GROUP BY acf.case_id, fu.user_id) raw_facility_cases),
  19.   user_cases AS (
  20.     SELECT case_id, user_id, role_name, options, 'case'::text AS SOURCE
  21.       FROM access_case_user
  22.       WHERE user_id = 320),
  23.   patient_cases AS (
  24.     SELECT cc.id AS case_id, patient.user_id, 'patient'::text AS role_name, 'patient'::text AS SOURCE
  25.     FROM click_case cc
  26.     JOIN patient ON cc.patient_id = patient.id
  27.     WHERE patient.user_id = 320),
  28.   without_followup_visible_cases AS (
  29.     SELECT COALESCE(fc.case_id, uc.case_id, pc.case_id) AS case_id,
  30.            COALESCE(fc.user_id, uc.user_id, pc.user_id) AS user_id,
  31.            COALESCE(uc.role_name, fc.role_name, pc.role_name) AS role_name,
  32.            COALESCE(uc.options, '{}') AS options,
  33.            COALESCE(uc.SOURCE, fc.SOURCE, pc.SOURCE)::text AS SOURCE
  34.       FROM facility_cases fc
  35.       FULL OUTER JOIN user_cases uc
  36.       ON fc.case_id = uc.case_id
  37.       FULL OUTER JOIN patient_cases pc
  38.       ON fc.case_id = pc.case_id),
  39.   visible_cases AS (
  40.     SELECT COALESCE(cc2.id, wfvc2.case_id) AS case_id,
  41.            COALESCE(wfvc.user_id, wfvc2.user_id) AS user_id,
  42.            COALESCE(wfvc.role_name, wfvc2.role_name) AS role_name,
  43.            COALESCE(wfvc.options, wfvc2.options) AS options,
  44.            COALESCE(wfvc.SOURCE, wfvc2.SOURCE)::text AS SOURCE
  45.       FROM click_case cc2
  46.       JOIN without_followup_visible_cases wfvc
  47.       ON cc2.parent_id = wfvc.case_id
  48.       FULL OUTER JOIN without_followup_visible_cases wfvc2
  49.       ON cc2.id = wfvc2.case_id
  50. )
  51. SELECT * FROM visible_cases
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement