求个sql,相同单号只取一条费用

水向东流时光怎么偷 2019-08-14 11:40:18
SELECT e.Carrier_Name,
a.OrderNumber,
SUM(b.TranslationsCost + b.TranslationsCostTP + b.ReturnBoxCost + b.PickupCost + b.LoadinCost + b.DeliveryCost
+ b.UpstairsCost + b.HandlingCost + b.VentingCost + b.OvernightCost + b.ShortCost + b.OtherCost
+ b.OtherCost1 + b.DeductionCost
) AS ReSumCost
FROM dbo.TMS_Order a
JOIN dbo.TMS_Order_Receivable b
ON a.OrderNumber = b.orderNumber
JOIN dbo.TMS_OrderSendTruckList c
ON a.OrderNumber = c.OrderNumber
JOIN dbo.TMS_OrderSendTruck d
ON c.SendTruck_Number = d.SendTruck_Number
JOIN dbo.TMS_Base_Carrier e
ON d.Carrier_Guid = e.Carrier_Guid
GROUP BY e.Carrier_Name,
a.OrderNumber
ORDER BY a.OrderNumber;
/*Carrier_Name OrderNumber ReSumCost
临时 JOY19080300003 170
张三 JOY19080300003 170
临时 JOY19080300004 196.5
张三 JOY19080300004 196.5
临时 JOY19080300006 458.8
张三 JOY19080300006 458.8
李四 JOY19080300007 272
李四 JOY19080300008 315
临时 JOY19080300008 315
*/

相同OrderNumber只取一条ReSumCost到出以下结果
/*Carrier_Name OrderNumber ReSumCost
临时 JOY19080300003 170
张三 JOY19080300003 0
临时 JOY19080300004 196.5
张三 JOY19080300004 0
临时 JOY19080300006 458.8
张三 JOY19080300006 0
李四 JOY19080300007 272
李四 JOY19080300008 315
临时 JOY19080300008 0
*/


...全文
217 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2019-08-14
  • 打赏
  • 举报
回复
DECLARE @t TABLE(Carrier_Name NVARCHAR(10) NOT NULL,
OrderNumber VARCHAR(20) NOT NULL,
ReSumCost DECIMAL(10, 2) NOT NULL);

INSERT @t(Carrier_Name, OrderNumber, ReSumCost)
VALUES('临时', 'JOY19080300003', 170),
('张三', 'JOY19080300003', 170),
('临时', 'JOY19080300004', 196.5),
('张三', 'JOY19080300004', 196.5),
('临时', 'JOY19080300006', 458.8),
('张三', 'JOY19080300006', 458.8),
('李四', 'JOY19080300007', 272),
('李四', 'JOY19080300008', 315),
('临时', 'JOY19080300008', 315);

SELECT *,
CASE WHEN LAG(OrderNumber, 1) OVER (PARTITION BY OrderNumber ORDER BY OrderNumber) = OrderNumber THEN
0
ELSE ReSumCost
END NewReSumCost
FROM @t;

Carrier_Name OrderNumber ReSumCost NewReSumCost
------------ -------------------- --------------------------------------- ---------------------------------------
临时 JOY19080300003 170.00 170.00
张三 JOY19080300003 170.00 0.00
临时 JOY19080300004 196.50 196.50
张三 JOY19080300004 196.50 0.00
临时 JOY19080300006 458.80 458.80
张三 JOY19080300006 458.80 0.00
李四 JOY19080300007 272.00 272.00
李四 JOY19080300008 315.00 315.00
临时 JOY19080300008 315.00 0.00

(9 行受影响)
二月十六 2019-08-14
  • 打赏
  • 举报
回复
SELECT Carrier_Name,
       OrderNumber,
       CASE
            WHEN ROW_NUMBER() OVER (PARTITION BY ReSumCost ORDER BY GETDATE()) = 1 THEN ReSumCost
            ELSE 0 END ReSumCost
  FROM (   SELECT e.Carrier_Name,
                  a.OrderNumber,
                  SUM(b.TranslationsCost + b.TranslationsCostTP + b.ReturnBoxCost + b.PickupCost + b.LoadinCost
                      + b.DeliveryCost + b.UpstairsCost + b.HandlingCost + b.VentingCost + b.OvernightCost
                      + b.ShortCost + b.OtherCost + b.OtherCost1 + b.DeductionCost) AS ReSumCost
             FROM dbo.TMS_Order a
             JOIN dbo.TMS_Order_Receivable b
               ON a.OrderNumber      = b.orderNumber
             JOIN dbo.TMS_OrderSendTruckList c
               ON a.OrderNumber      = c.OrderNumber
             JOIN dbo.TMS_OrderSendTruck d
               ON c.SendTruck_Number = d.SendTruck_Number
             JOIN dbo.TMS_Base_Carrier e
               ON d.Carrier_Guid     = e.Carrier_Guid
            GROUP BY e.Carrier_Name,
                     a.OrderNumber) T
 ORDER BY OrderNumber;

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧