Добавьте числа из трех разных запросов вместе - PullRequest
0 голосов
/ 01 октября 2018

Я получаю средние значения за последние 3, 6 и 10 месяцев. Из следующих запросов

select SUM(GrossAmount)/10 as Averageten  
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -10, GETDATE()) 

select SUM(GrossAmount)/6 as Averagesix  
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -6, GETDATE()) 

select SUM(GrossAmount)/3 as Averagethree  
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -3, GETDATE())

Например, я получаю три разных значения:

1200.22
2300.22
4500

Я хочуполучить среднее значение этих трех значений, как это

(1200.22 + 2300.22 + 4500) / 3

Как добавить значения из этих отдельных запросов.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Использовать условное агрегирование.

SELECT
(
    SUM(CASE WHEN CreatedDate >= DATEADD(MONTH, -10, GETDATE()) THEN GrossAmount END) / 10 +
    SUM(CASE WHEN CreatedDate >= DATEADD(MONTH,  -6, GETDATE()) THEN GrossAmount END) /  6 +
    SUM(CASE WHEN CreatedDate >= DATEADD(MONTH,  -3, GETDATE()) THEN GrossAmount END) /  3
) / 3 AS [10, 6, 3 Average]
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -10, GETDATE()) -- this covers all three cases
0 голосов
/ 01 октября 2018

Используйте объединение, чтобы объединить три запроса, а затем в среднем

select avg(Averageten)
from
(select SUM(GrossAmount)/10 as Averageten  
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -10, GETDATE()) 
union
select SUM(GrossAmount)/6 
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -6, GETDATE()) 
union 
select SUM(GrossAmount)/3   
FROM Table
WHERE CreatedDate >= DATEADD(MONTH, -3, GETDATE())
)a

ИЛИ вы можете использовать условное агрегирование, чтобы найти значения, которые вы запрашиваете, из одной и той же таблицы с другим условием

select ((sum(case when CreatedDate >= DATEADD(MONTH, -10, GETDATE()) then GrossAmount end)/10)
+(sum(case when CreatedDate >= DATEADD(MONTH, -6, GETDATE()) then GrossAmount end)/6)
+(sum(case when CreatedDate >= DATEADD(MONTH, -3, GETDATE()) then GrossAmount end)/3))/3 
from tablename
...