0

首先,我要感谢你们对我的问题和其他问题的所有帮助。

我有 MS SQL 2008 R2,我得到了两列的总和,如下所示:

SELECT SUM(RATE+RATE_ADDITIONAL) FROM LOADS WHERE INVOICED=1 
and NOT OV_FACTORING=2 and DATE_INVOICED >= '1/1/2007' 
and DATE_INVOICED <= '5/1/2012'

但是当我这样尝试时:

SELECT SUM(RATE+RATE_ADDITIONAL) FROM LOADS WHERE INVOICED=1 
AND OV_FACTORING=3 OR OV_FACTORING=4 OR OV_FACTORING=5 
and DATE_INVOICED >= '1/1/2007' and DATE_INVOICED <= '5/1/2012'

当它应该相同时,它会得到不同的总数,因为在 OV_FACTORING 中,唯一的值是:2、3、4 和 5。

我有一个名为 LOAD_NO 的列,我想在另一个查询中获得不同或不存在的 LOAD_NO,因此类似于比较两个查询并输出不同或显示在其中一个查询中的 load_no 和不在另一个。

我在网站上尝试了一些示例,但无法让它们工作。

再次感谢您的所有帮助...

4

4 回答 4

2

如果你想限制 OV_FACTORING 你可以这样做:

SELECT OV_FACTORING, SUM(RATE+RATE_ADDITIONAL) 
  FROM dbo.LOADS 
  WHERE INVOICED = 1
  AND OV_FACTORING IN (3,4,5)
  AND DATE_INVOICED >= '20070101' 
  AND DATE_INVOICED <= '20120501'
  GROUP BY OV_FACTORING;

或者,如果您真的想要这些OR陈述。然后你可以这样做:

SELECT OV_FACTORING, SUM(RATE+RATE_ADDITIONAL) 
  FROM dbo.LOADS 
  WHERE INVOICED = 1
  AND (OV_FACTORING=3 OR OV_FACTORING=4 OR OV_FACTORING=5)
  AND DATE_INVOICED >= '20070101' 
  AND DATE_INVOICED <= '20120501'
  GROUP BY OV_FACTORING;
于 2012-05-02T13:35:35.977 回答
1

为了查看表中的数字是否准确,请检查以下结果:

SELECT OV_FACTORING, SUM(RATE+RATE_ADDITIONAL) 
  FROM dbo.LOADS 
  WHERE INVOICED = 1
  AND DATE_INVOICED >= '20070101' 
  AND DATE_INVOICED <= '20120501'
  GROUP BY OV_FACTORING;

一些与问题无关的一般性评论:

  • 回车和缩进使查询的可读性提高 100 倍
  • 从不使用区域格式的日期 - 2012 年 5 月 1 日是 5 月 1 日还是 1 月 5 日?(博文
  • 为您的查询指定架构前缀(博客文章
于 2012-05-02T13:34:23.430 回答
1

要获得相同的结果,您需要将OV_FACTORING过滤器隔离在一起,如下所示:

SELECT SUM(RATE+RATE_ADDITIONAL) 
FROM LOADS WHERE INVOICED=1 AND 
(OV_FACTORING=3 OR OV_FACTORING=4 OR OV_FACTORING=5) AND 
DATE_INVOICED >= '1/1/2007' AND DATE_INVOICED <= '5/1/2012'
于 2012-05-02T13:36:12.533 回答
1
SELECT SUM(RATE+RATE_ADDITIONAL) 
FROM LOADS 
WHERE INVOICED=1 
AND (OV_FACTORING=3 OR OV_FACTORING=4 OR OV_FACTORING=5) 
AND DATE_INVOICED >= '1/1/2007' 
AND DATE_INVOICED <= '5/1/2012
于 2012-05-02T13:36:41.953 回答