Danny_wm 2019-11-21 18:27 采纳率: 0%
浏览 219

数据根据明细合并后对比判断取值

数据库中有一个数据需要处理,将明细数据中的【购买数量】和【到货数量】根据名称进行汇总,【日期】根据【购买数量】和【到货数量】进行对比判断显示

例如下面的数据源:
1、名称A的总到货数量是130,比2019-11-20的100要大,但是小于2019-11-20和2019-11-25的数量之和300,则结果的日期就等于【2019-11-25】;
1、名称B的总到货数量是180,比2019-11-20的400要小,则结果的日期就等于【2019-11-20】

数据源:
名称 日期 购买数量 到货数量
A 2019-11-20 100 80
A 2019-11-25 200 20
A 2019-11-30 300 30
B 2019-11-20 400 50
B 2019-11-25 500 60
B 2019-11-30 600 70

希望得到的结果是这样的:
名称 日期 购买数量 到货数量
A 2019-11-25 600 130
B 2019-11-20 1500 180

现在的是在明细数据后面增加一个字段进行分批汇总,但是后续判断怎么按照条件显示不知道怎么操作
SUM(PurchaseCount) over(order by Cast(PurchaseShipDate as Date),MaterialCode)

请各位大神赐教

  • 写回答

1条回答 默认 最新

  • 树莓大王 2023-03-15 05:07
    关注

    根据您的描述,您需要对明细数据进行分组汇总,然后对比判断并取得相应的日期。对于这个问题,您可以采用以下的SQL语句来解决:

    SELECT  
        MaterialCode AS 名称, 
        CASE 
            WHEN SUM(ReceiveCount) > PurchaseCount AND SUM(ReceiveCount) < PurchaseCount + LAG(PurchaseCount, 1, 0) OVER (ORDER BY PurchaseShipDate,MaterialCode) 
            THEN LAG(PurchaseShipDate, 1, NULL) OVER (ORDER BY PurchaseShipDate,MaterialCode) 
                
            WHEN SUM(ReceiveCount) > LAG(PurchaseCount, 1, 0) OVER (ORDER BY PurchaseShipDate,MaterialCode) 
            THEN PurchaseShipDate 
                
            ELSE NULL 
        END AS 日期, 
        SUM(PurchaseCount) AS 购买数量, 
        SUM(ReceiveCount) AS 到货数量 
    FROM YourTable 
    GROUP BY MaterialCode
    

    这个SQL语句会对您的数据按照名称进行分组汇总,然后根据要求进行对比判断,得到相应的日期。最终结果中包含名称、日期、购买数量和到货数量四个字段。

    希望对您有所帮助!

    评论

报告相同问题?