Итоги вместо количества в этом запросе - PullRequest
0 голосов
/ 02 марта 2020

У меня есть рабочий запрос, который мне помогли получить люди. Это дает мне общее количество заказов за 0-30 дней, 31-60 и др. c. Теперь меня попросили заменить номер на общую сумму этих заказов. Я не уверен в синтаксисе строк SUM. Я не уверен на 100%, что могу суммировать заказы, используя этот запрос.

SELECT DISTINCT 

bh.Customer_Name AS Customer_Name,
ad.Email_Address,
SUM(CASE WHEN CA1.Time = '0 - 30' THEN 1 ELSE 0 END) AS "0_30",
SUM(CASE WHEN CA1.Time = '31 - 60' THEN 1 ELSE 0 END) AS "31_60",
SUM(CASE WHEN CA1.Time = '61 - 90' THEN 1 ELSE 0 END) AS "61_90",
SUM(CASE WHEN CA1.Time = '90+' THEN 1 ELSE 0 END) AS "90+"

FROM

dbo.Billing_Detail bd LEFT OUTER JOIN
dbo.Billing_Header bh ON bd.Billing_Header_ID = bh.Billing_Header_ID LEFT OUTER JOIN
dbo.Commission_Distribution cd ON bh.Billing_Header_ID = cd.Billing_Header_ID LEFT OUTER JOIN
dbo.Salesman_Code sc ON cd.Salesman_Code = sc.Salesman_Code LEFT OUTER JOIN
dbo.Address ad ON bh.Billing_Header_ID = ad.Billing_Header_ID 

CROSS APPLY (
    SELECT 
    CASE WHEN ((DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1) <= '30') 
    THEN '0 - 30'
    WHEN '30' < (DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1) AND (DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1) <= '60'
    THEN '31 - 60'
   WHEN '61' < (DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1) AND (DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1) <= '90'
    THEN '61 - 90'    
  ELSE '90+'
    END AS Time
 ) AS CA1 

WHERE
bd.Product_Code  NOT LIKE  '%PROCESS%' AND
bd.Product_Code  NOT LIKE  '%DEPOSIT%' AND
DATEDIFF(dd,GETDATE(),bh.Invoice_Date)  <=  -30 AND
bh.Balance_Due  >  '0' AND
bd.Company_Code  =  'AIN' AND
bh.Invoice_Number  NOT LIKE  '%-%' AND
bd.Unit_Price  >  '0' AND
ad.Address_Type  IN  ( '' , 'BILLING' ) 

GROUP by bh.Customer_Name, ad.Email_Address 

Буду признателен за любую помощь или направление.

1 Ответ

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

Внутри каждой из ваших сумм есть инструкция case, которая дает вам 1, если строка удовлетворяет условию (т. Е. Если она соответствует порядку в желаемом периоде времени), и 0 в противном случае. Сумма всех 1 - это количество строк (заказов), которые удовлетворяют условию. Теперь вместо добавления 1 для каждой строки, которая удовлетворяет условию (что соответствует подсчету рассматриваемых строк), вы хотите добавить ее соответствующую сумму (что равняется вычислению общей суммы для рассматриваемых строк). Таким образом, вы можете использовать тот же код, просто замените суммы на эти:

SUM(CASE WHEN CA1.Time = '0 - 30' THEN CA1.Amount ELSE 0 END) AS "0_30",
SUM(CASE WHEN CA1.Time = '31 - 60' THEN CA1.Amount ELSE 0 END) AS "31_60",
SUM(CASE WHEN CA1.Time = '61 - 90' THEN CA1.Amount ELSE 0 END) AS "61_90",
SUM(CASE WHEN CA1.Time = '90+' THEN CA1.Amount ELSE 0 END) AS "90+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...