Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 此查询中的总数而不是计数_Sql_Sum - Fatal编程技术网

Sql 此查询中的总数而不是计数

Sql 此查询中的总数而不是计数,sql,sum,Sql,Sum,我有一个工作问题,个人帮助我工作。它给出了0-30天、31-60天等的订单总数。我现在被要求用这些订单的总数替换这个数字。我不确定求和行的语法。我不能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.Tim

我有一个工作问题,个人帮助我工作。它给出了0-30天、31-60天等的订单总数。我现在被要求用这些订单的总数替换这个数字。我不确定求和行的语法。我不能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 
选择DISTINCT
bh.客户名称作为客户名称,
广告电子邮件地址,
求和(当CA1.Time='0-30'时,则为1,否则为0结束)为“0_30”,
求和(当CA1.Time='31-60'时,则为1,否则为0结束)为“31_60”,
求和(当CA1.Time='61-90'然后1或0结束时的情况)为“61_90”,
求和(当CA1.Time='90+'然后1或0结束时的情况)为“90+”
从…起
dbo.u详细信息bd左外连接
bd.Billing\u Header上的dbo.Billing\u Header\u ID=bh.Billing\u Header\u ID左外部联接
bh.Billing\u Header\u ID=cd.Billing\u Header\u ID左侧外部联接上的dbo.Commission\u分发cd
dbo.saller\u代码cd上的sc.saller\u代码=sc.saller\u代码左外连接
bh.Billing\u Header\u ID=ad.Billing\u Header\u ID上的dbo.Address广告
交叉应用(
挑选

CASE WHEN((DATEDIFF(dd,GETDATE(),bh.Invoice_Date)*-1)在您的每一笔金额中,您有一个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+"

唐恩恩,非常感谢你的帮助和解释。这真的很有帮助,我现在可以拿着这个,看看我是否可以在其他地方使用它,现在我知道它在做什么了。再次感谢。