【问题标题】:Select records ignoring null values with date between some range选择忽略日期在某个范围内的空值的记录
【发布时间】:2013-07-18 00:37:14
【问题描述】:

我只想要那些在特定日期之间必须存在记录的记录。例如如果给定的日期在 2013-7-1 和 2013-7-17 之间,并且我在采购表中有一个条目,日期为:2013-6-5,而销售表中的条目日期为 2013-7-17,用于特定产品。它应该忽略这些行并仅选择在所需日期范围内发生销售和购买的那些行。我的以下查询无法正常工作。由于上面定义的情况除以零异常发生。请帮助我。

SELECT        o.Name AS Owner, c.Name AS Company, SUM(sq.PQuantity) - SUM(sq.SQuantity) AS Quantity, SUM(sq.PQuantity * sq.PRate) / SUM(sq.PQuantity) AS Rate, 
                             (SUM(sq.PQuantity) - SUM(sq.SQuantity)) * (SUM(sq.PQuantity * sq.PRate) / SUM(sq.PQuantity)) AS Amount,sq.CompanyId AS CompanyId, o.OwnerId AS OwnerId
    FROM            (SELECT        OwnerId, CompanyId, Quantity AS PQuantity, RatePerShare AS PRate, 0 AS SQuantity, 0 AS SRate, Date
                              FROM            Purchase
                              UNION ALL
                              SELECT        OwnerId, CompanyId, Quantity AS PQuantity, 0 AS PRate, 0 AS SQuantity, 0 AS SRate, Date
                              FROM            Bonus
                              UNION ALL
                              SELECT        OwnerId, CompanyId, Quantity AS PQuantity, CostOfShare AS PRate, 0 AS SQuantity, 0 AS SRate, Date
                              FROM            RightShare
                              UNION ALL
                              SELECT        OwnerId, CompanyId, 0 AS PQuantity, 0 AS PRate, Quantity AS SQuantity, RatePerShare AS SRate, Date
                              FROM            Sales) AS sq INNER JOIN
                             Owner AS o ON sq.OwnerId = o.OwnerId INNER JOIN
                             Company AS c ON sq.CompanyId = c.CompanyId
    WHERE        (sq.OwnerId = @Param1) AND (CONVERT(DATE, sq.Date, 111) BETWEEN @Param2 AND  @Param3)
    GROUP BY sq.CompanyId, c.Name, o.Name, o.OwnerId

【问题讨论】:

  • 这突然出现在我身上 "/SUM(nullif(sq.PQuantity,0)"
  • 我已经编辑了问题,我使用 nullif 来避免这种情况,但它没有给出正确的结果。

标签: sql sql-server sql-server-2008


【解决方案1】:

HAVING SUM(sq.PQuantity) > 0 添加到查询的底部。

【讨论】:

  • 它有效,非常感谢 :) 将在 3 分钟内接受您的回答:D
猜你喜欢
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
相关资源
最近更新 更多