【问题标题】:Select distinct values from one column and sum another column从一列中选择不同的值并对另一列求和
【发布时间】:2021-04-02 03:51:51
【问题描述】:

我在这里显示了这个存储过程,它计算每个部门的订单数量、拒绝和拒绝百分比,但我有一个问题:为了对订单数量求和,我只需要考虑不同的订单号来对订单数量求和,但对于拒绝数量,应考虑所有行。如何做到这一点?

存储过程:

CREATE PROCEDURE orderqtyper
    @fromDate Date,
    @toDate Date
AS
    SELECT 
        Department, 
        SUM(Order_Qty) AS [Order Qty],
        SUM(Rejection_Qty) AS [Rejection Qty],
        FORMAT((SUM(Rejection_Qty) * 100.0 / NULLIF(SUM(Order_Qty), 0) / 100), 'P') AS Percentage   
    FROM 
        Semicon_NPD
    WHERE 
        (Date BETWEEN @fromDate AND @toDate)
    GROUP BY 
        Department
    ORDER BY 
        Percentage DESC

示例表:

当前结果:

预期结果(如果订单号相同,则订单数量应仅取唯一值之和,而拒绝数量应取所有值之和):

【问题讨论】:

  • 您的表是非规范化的。 RejectionQty 应该是一个带有外键的单独表,那么您将只有一行要处理
  • 嗨@Charlieface..我是sql server的新手,你能解释一下吗..

标签: sql-server stored-procedures unique


【解决方案1】:

您可以将DISTINCT 用作 SUM(DISTINCT )

create proc orderqtyper
@fromDate Date,
@toDate Date
as
SELECT Department, 
    SUM(DISTINCT Order_Qty)as [Order Qty],
    SUM(Rejection_Qty) as [Rejection Qty],
   Format((SUM(Rejection_Qty) * 100.0 / NULLIF(SUM(Order_Qty), 0)/100),'P')  AS Percentage   
FROM Semicon_NPD
Where (Date between  @fromDate  and  @toDate)
GROUP BY Department
order by Percentage desc
go

【讨论】:

  • 嗨@Susang ..谢谢您的回复,但我需要不同的订单号和订单数量总和...如何实现?
  • 您正在对数据部门进行分组,并且每个部门都有一个唯一的订单号,因此在这种情况下,您将无法获得上面提到的预期结果,但您可以选择最小/最大订单按部门和订单号对数据进行编号或分组。最后,结果会随着行数的增加而不同。
猜你喜欢
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2020-12-18
  • 2021-01-05
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2011-05-06
相关资源
最近更新 更多