使用子查询并按日期排序值

时间:2015-08-19 11:33:45

标签: sql sql-server database

我正在尝试获取日期,折扣,总计,净总额...按日期排序,折扣显示实际金额但是当我选择多个日期时,总金额将在我选择的那些日期汇总它将按日期排序

DECLARE @pR FLOAT = (SELECT  SUM(CAST(Price AS FLOAT)) AS Price 
                     FROM Orders WHERE isPaid = 1  
                      AND PaidDate BETWEEN '8/17/2015' AND  '8/18/2015' ) ;

SELECT Orders.PaidDate 
     , @pR AS Total 
     ,sum(theorderids.Discount) As Discount
     ,(@pR - sum(theorderids.Discount)) AS [Net Total] 
From 
    (SELECT OrderId, PaidDate 
     FROM Orders 
     WHERE Orders.PaidDate BETWEEN '8/17/2015' AND'8/18/2015' 
     GROUP BY Orders.OrderId, Orders.PaidDate) AS Orders
INNER JOIN theorderids ON Orders.OrderId = theorderids.ID 
GROUP BY Orders.PaidDate ;

示例数据:

第1行     “PaidDate”:“2015年8月17日”,     “总计”:7388.0,     “折扣”:38.0,     “NetTotal”:7363.0

第2行     “PaidDate”:“18-08-2015”,     “总计”:7388.0,     “折扣”:2.0,     “NetTotal”:7363.0

2 个答案:

答案 0 :(得分:1)

这样可行。

 SELECT TheOrderids.PaidDate, MAX(Price) AS Total 
        ,sum(theorderids.Discount) As Discount
        ,(MAX(Price) - sum(theorderids.Discount)) AS [Net Total]
From 
    (SELECT PaidDate ,SUM(Price ) AS Price 
     FROM Orders 
         WHERE Orders.PaidDate BETWEEN '8/17/2015' AND'8/19/2015' 
         GROUP BY Orders.PaidDate
    ) AS Orders
INNER JOIN theorderids ON Orders.PaidDate = theorderids.PaidDate 
GROUP BY theorderids.PaidDate 
ORDER BY theorderids.PaidDate ;

enter image description here

答案 1 :(得分:0)

试试这种方式

SELECT Orders.PaidDate 
     , @pR AS Total 
     ,sum(theorderids.Discount) As Discount
     ,(@pR - sum(theorderids.Discount)) AS [Net Total] 
From 
    (SELECT ROW_NUMBER() OVER(ORDER BY Orders.PaidDate ) AS Row, OrderId, PaidDate 
     FROM Orders 
     WHERE Orders.PaidDate BETWEEN '8/17/2015' AND'8/18/2015' 
     GROUP BY Orders.OrderId, Orders.PaidDate) AS Orders
INNER JOIN theorderids ON Orders.OrderId = theorderids.ID 
GROUP BY Orders.PaidDate ;