【问题标题】:Adding 30 days, 60 days and 90 days column for payments made during that time in SQLServer在 SQLServer 中为该时间段内的付款添加 30 天、60 天和 90 天列
【发布时间】:2020-04-15 11:58:42
【问题描述】:

我想向我的 GridControl 添加三列,显示过去 30、60 和 90 天的付款。 下面是我用来获取单个客户的所有付款(金额)的 SQL 语句。

SELECT p.CustomerID, c.FirstName, c.LastName, SUM(p.Amount) As 'Amount
FROM Payment p
INNER JOIN Customer c
on p.CustomerID = c.ID
Group by p.CustomerID, c.FirstName, c.LastName 

我也尝试了以下方法,但它只给了我一个 NULL 值

SELECT p.CustomerID, c.FirstName, c.LastName, SUM(p.Amount) As 'Amount', a.[30Days] As '30 Days'
FROM Payment p
inner join Customer c
on p.CustomerID = c.ID
JOIN (SELECT SUM(p.Amount) AS '30Days'
      FROM Payment p 
      WHERE DATEDIFF(day, GETDATE(), PaymentDate) BETWEEN 0 AND 30) AS a ON c.ID = p.CustomerID
Group by p.CustomerID, c.FirstName, c.LastName, a.[30Days]

【问题讨论】:

  • 你有可以用来计算天数的列吗?
  • 您需要添加一列来记录付款完成的日期和时间。这样您就可以使用日期差异来获得您想要的结果。

标签: sql-server vb.net


【解决方案1】:

您应该查看 datediff - 您的参数设置错误,您可以使用条件聚合,因此不需要第三次连接。

SELECT p.CustomerID,  SUM(p.Amount) As 'Amount',
         sum(case when DATEDIFF(day,  PaymentDate,GETDATE()) BETWEEN 0 AND 30 then amount else 0 end) [30days],
         sum(case when DATEDIFF(day,  PaymentDate,GETDATE()) BETWEEN 0 AND 60 then amount else 0 end) [60days],
         sum(case when DATEDIFF(day,  PaymentDate,GETDATE()) BETWEEN 0 AND 90 then amount else 0 end) [90days]
FROM Payment p
INNER JOIN Customer c
on p.CustomerID = c.customerID
Group by p.CustomerID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2020-06-02
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多