2016-09-21 1 views
0

У меня есть сложный запрос .... Мне нужно сделать заявление о обновлении по суммированию двух связанных SQL-запросов (проблема в том, что данные в запросах не являются числовыми поэтому я подсчитываю строки вместо суммирования значений), но мне тогда нужно суммировать эти строки.SQL Union Count to Sum Data

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 

то, что мне нужно pCount быть установлен в конце дня является 8

Ожидаемые результаты
w курица я select * from #LT_Actuals_TEMP я вижу значение 8 для имени программы, Id 31

+0

отправьте свой ожидаемый результат – TheGameiswar

+0

отправлено/настроено! – YelizavetaYR

+0

Также вы вытащили кучу '... \' из кода, но это должно было показать большой сложный запрос, который не так прост, как он выше. Но пока это ясно, что происходит, я с этим согласен. – YelizavetaYR

ответ

1

Вы можете решить, добавив еще один уровень в от части, где вы подытожить данные, возвращаемые из союза.

Ваш запрос, кажется, не хватает некоторых исходных таблиц (так как есть псевдонимы, используемые, которые не указывают ни к чему), так что я предполагаю, что вы удалили некоторые детали, но в целом это должно выглядеть примерно так:

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, чтобы дубликаты не удалялись.

+0

Мне очень жаль путаницы, но мне трудно понять, что было добавлено здесь, чтобы решить проблему. – YelizavetaYR

+0

@YelizavetaYR Я попытался отформатировать его лучше, чтобы было легче увидеть дополнение. Я завернул ваш первоначальный запрос соединения во внешний запрос, который суммирует данные. – jpw

+0

Ahh Я получаю концепцию, вы добавили один дополнительный уровень. Вы суммировали/агрегировали мои данные на одном уровне вверх, а затем выполнили обновление – YelizavetaYR