2013-04-24 18 views
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%' 

正如你所看到的,每一组数据来自一个不同的表格,并没有关系。我怎样才能完成我想要的结果集?

谢谢。

+0

使用'Union'从Tableb'。实例'选择col1,4 SELECT查询从表A工会选择COL2,5间 – praveen 2013-04-24 12:08:18

回答

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%' 
+0

感谢@muhmud的回应,我添加了一个更多的子查询,它与我的'自杀囚犯'数量来自同一个表。你能在你的答案中包括这个吗? – etm124 2013-04-24 12:14:42

+1

完成。我也更新了它来使用'pivot',在那里你有来自相同的from子句计数。 – muhmud 2013-04-24 12:20:21

0

与联盟试试这个是形式在一个查询:

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%' 
相关问题