Сравните продажи с прошлогодними продажами на одного клиента - PullRequest
0 голосов
/ 25 марта 2020

У меня есть 2 запроса, по которым я использовал UNION для сравнения стоимости продаж на одного клиента за 2 года. Ниже приведены 2 столбца, один для организаций и один для значения продаж / клиента. Но двухлетний сплит не работает. Кажется, что все значения вытягиваются в один столбец, а не столбец для 2018 года и столбец для 2019 года. Может быть, мне следует использовать соединение или подзапрос?

Результат возврата будет выглядеть примерно так: :

Organization    Last Year      Previous year
CUS                 12000        160000
etc
SELECT Top 25
    FORMAT(SUM(dbo.ARInvoices.arpFullInvoiceSubtotalBase), 'C2') AS "previousyear ", dbo.Organizations.cmoOrganizationID AS "Organization"
FROM (dbo.ARInvoices
LEFT OUTER JOIN dbo.Organizations ON dbo.ARInvoices.arpCustomerOrganizationID = dbo.Organizations.cmoOrganizationID)  
WHERE  YEAR(arpInvoiceDate) = year(DATEADD(year, -2, getdate()))AND arpInvoiceType = 1
GROUP BY dbo.Organizations.cmoOrganizationID

UNION

SELECT Top 25
    FORMAT(SUM(dbo.ARInvoices.arpFullInvoiceSubtotalBase), 'C2') AS "Lastyear", dbo.Organizations.cmoOrganizationID AS "Organization"
FROM (dbo.ARInvoices
LEFT OUTER JOIN dbo.Organizations ON dbo.ARInvoices.arpCustomerOrganizationID = dbo.Organizations.cmoOrganizationID)   
WHERE  YEAR(arpInvoiceDate) = year(DATEADD(year, -1, getdate()))AND arpInvoiceType = 1
GROUP BY dbo.Organizations.cmoOrganizationID'

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете сделать условное агрегирование

select
    sum(case 
        when arpInvoiceDate >= datefromparts(year(getdate()) - 2, 1, 1) 
             and arpInvoiceDate < datefromparts(year(getdate()) - 1, 1, 1) 
        then i.arpFullInvoiceSubtotalBase
    end) as previousYear,
    sum(case 
        when arpInvoiceDate >= datefromparts(year(getdate()) - 1, 1, 1)
        then i.arpFullInvoiceSubtotalBase
    end) as lastYear
from dbo.ARInvoices i 
inner join dbo.Organizations o ON i.arpCustomerOrganizationID = o.cmoOrganizationID
where arpInvoiceType = 1 and arpInvoiceDate >= datefromparts(year(getdate()) - 2, 1, 1)
group by o.cmoOrganizationID

Примечания:

  • Я использовал INNER JOIN вместо LEFT JOIN, так как один из столбцов для левой таблицы используется в предложении GROUP BY

  • псевдонимы таблицы делают запрос короче и проще для чтения

  • Я изменил реализацию фильтрация даты, поэтому в столбцах таблицы не используется функция даты (это делает запрос более эффективным)

...