SQL Union计数到Sum数据

时间:2016-09-21 16:37:01

标签: sql-server count sum aggregate union

我有一些复杂的查询....我需要对两个联合编写的SQL查询的总和做一个更新语句(问题是查询中的数据不是数字,所以我&#39 ; m计数行而不是求和值)但我需要对这些行求和。

library(data.table)
setDT(df2)
j1 <-  which(sapply(df1, function(x) all(is.na(x))))

for(j in j1){
   set(df2, i = NULL, j = j, value = NA)
}

第一个查询数据就这样回来了

UPDATE  #LT_Actuals_TEMP 
SET     pCount =  h.countPerfs
FROM    (
select count(distinct c.perf_description) as countPerfs, b.program, b.Prog_id
from #LT_Actuals_TEMP TableP
where       a.Performances = 'Y' and a.current_inactive = 0
group by    b.Program, b.Prog_id
union 
select  distinct count(p.perf_code) as countPerfs, x.value, b.Prog_id
from    T_PERF p    
where   x.content_type = 23
group by  x.value, b.Prog_id
) h where h.Prog_id = #LT_Actuals_TEMP.program_id

,第二个查询返回

countPerfs   program    Prog_id
7            Name       31

我需要countPerfs program Prog_id 1 Name 31 在一天结束时设置为8

预期结果
当我做pCount 我看到了价值 8为节目名称,Id 31

1 个答案:

答案 0 :(得分:1)

您可以通过在from部分中添加另一个级别来解决它,在该部分中总结从union返回的数据。

你的查询似乎缺少一些源表(因为使用的别名没有指向任何东西)所以我猜你删除了一些部分,但一般来说它应该是这样的:

UPDATE  #LT_Actuals_TEMP 
SET     pCount =  h.sum_of_countperfs    
FROM    (
  select program, prog_id, sum(countPerfs) as sum_of_countperfs
  from (
    select count(distinct c.perf_description) as countPerfs, b.program, b.Prog_id
    from #LT_Actuals_TEMP TableP
    where       a.Performances = 'Y' and a.current_inactive = 0
    group by    b.Program, b.Prog_id
    union all
    select  distinct count(p.perf_code) as countPerfs, x.value, b.Prog_id
    from    T_PERF p    
    where   x.content_type = 23
    group by  x.value, b.Prog_id
  ) as sub_q group by program, prog_id
) h where h.Prog_id = #LT_Actuals_TEMP.program_id

此外,您可能希望使用union all,以便不删除重复项。