2

カウントのレポートを生成するストアド プロシージャを毎日実行したいと考えています。

たとえば、.csv は次のようになります。

    Daily,1
    Deaths,0
    In-House EKG,4
    In-House Xray,2
    Suicidal Patients,12
    HIV,0

個々のクエリは次のようになります。

-- Daily and Death Counts
select
    SUM(CASE WHEN location != '[OUT]' THEN 1 ELSE 0 END) as 'Daily',
    SUM(CASE WHEN death = 1 THEN 1 ELSE 0 END) as 'Deaths'
from
    patient_data


-- In-House Tasks
select 
    SUM(CASE WHEN cat_id = 72 THEN 1 ELSE 0 END) as 'In-House EKG',
    SUM(CASE WHEN cat_id = 73 THEN 1 ELSE 0 END) as 'In-House XRay',    
from
    organizer_tasks

-- Suicidal Patients
select 
    count(distinct(pid)) as 'Suicidal Inmates'
from 
    problems pr 
        inner join problem_list pl on pl.id = pr.problem_list_id 
where 
    pr.status = 'open'
    and pl.title like '%suicide%'

-- HIV

select 
    count(distinct(pid)) as 'HIV'
from 
    problems pr 
        inner join problem_list pl on pl.id = pr.problem_list_id 
        inner join patient_data pd on pr.pid = pd.pid
where 
    pr.status = 'open'
    and pl.title like '%hiv%'

ご覧のとおり、データの各セットは異なるテーブルから取得されており、関係はありません。どうすれば目的の結果セットを達成できますか?

ありがとう。

4

2 に答える 2

2
-- Daily and Death Counts
select * from (
    select
        SUM(CASE WHEN location != '[OUT]' THEN 1 ELSE 0 END) as 'Daily',
        SUM(CASE WHEN death = 1 THEN 1 ELSE 0 END) as 'Deaths'
    from
        patient_data
) tmp unpivot (Number for Type in ([Daily], [Deaths])) t

union all

-- In-House Tasks
select * from (
    select 
        SUM(CASE WHEN cat_id = 72 THEN 1 ELSE 0 END) as 'In-House EKG',
        SUM(CASE WHEN cat_id = 73 THEN 1 ELSE 0 END) as 'In-House XRay'
    from
        organizer_tasks
) tmp unpivot (Number for Type in ([In-House EKG], [In-House XRay])) t

union all

-- Suicidal Patients
select 'Suicidal Inmates',
    count(distinct(pid))
from 
    problems pr 
        inner join problem_list pl on pl.id = pr.problem_list_id 
where 
    pr.status = 'open'
    and pl.title like '%suicide%'

union all

-- HIV

select 'HIV',
    count(distinct(pid))
from 
    problems pr 
        inner join problem_list pl on pl.id = pr.problem_list_id 
        inner join patient_data pd on pr.pid = pd.pid
where 
    pr.status = 'open'
    and pl.title like '%hiv%'
于 2013-04-24T12:10:28.243 に答える
0

1 つの Query のフォームである Union でこれを試してください:

    select
        SUM(CASE WHEN location != '[OUT]' THEN 1 ELSE 0 END) as 'Daily'   
    from
        patient_data    
UNION ALL
    select   
        SUM(CASE WHEN death = 1 THEN 1 ELSE 0 END) as 'Deaths'
    from
    patient_data

UNION ALL
-- In-House Tasks
    select 
        SUM(CASE WHEN cat_id = 72 THEN 1 ELSE 0 END) as 'In-House EKG'  
    from
    organizer_tasks
UNION ALL
    select
        SUM(CASE WHEN cat_id = 73 THEN 1 ELSE 0 END) as 'In-House XRay'
    from
        organizer_tasks 
UNION ALL
-- Suicidal Patients
    select 
        count(distinct(pid)) as 'Suicidal Inmates'
    from 
        problems pr 
            inner join problem_list pl on pl.id = pr.problem_list_id 
    where 
        pr.status = 'open'
        and pl.title like '%suicide%'
于 2013-04-24T12:13:30.780 に答える