首页 > 解决方案 > SQL - 基于条件的 SUM 值

问题描述

我无法加载此表。我希望在 NameCode 相同的情况下对所有 Quantity 值 <500 求和。如果总和仍小于 500,则不要插入。这可能吗?

CREATE TABLE [dbo].[GovQuantity](
        [NameCode] [varchar](40) NULL,
        [Quantity] [decimal](18,6) NULL,
        )



    INSERT INTO GovQuantity
    SELECT  d.NumNameCode
        , Quantity = CASE WHEN QUANTITY < 500 THEN SUM(Quantity) ELSE Quantity END 
          FROM [...]              
    GROUP BY NumNameCode, Quantity

目前有这个:

 NameCode     Quantity
 ArmyGuard       125
 ArmyGuard       605
 ArmyGuard       65
 Boeing          420
 Boeing          750
 Boeing          100

需要:

NameCode     Quantity
 ArmyGuard       605
 Boeing          520
 Boeing          750

标签: sqlsql-server

解决方案


也许是这样的。

这将显示单个行 >= 500 并聚合杂项。其他。

例子

;with cte as (
Select NameCode
      ,Quantity
      ,RN       = Row_Number() over (Partition By NameCode Order by Quantity)
 From  [dbo].[GovQuantity]
)
Select NameCode
      ,Quantity = sum(Quantity)
 From  cte
 Group By NameCode,case when Quantity >=500 then RN else 0 end
 Having sum(Quantity) > 500
 Order by NameCode

退货

NameCode    Quantity
ArmyGuard   605
Boeing      520
Boeing      750

推荐阅读