2

如果可能的话,我正在尝试将两个查询合并为一个,这就是我想做的。

  1. 从名为 FDetail 的表中选择所有内容 (*)
  2. 其中 TransactionDate 介于 01/01/2007 和 01/01/2015 之间
  3. 并且其中 ComNum=1090084785010
  4. 并获取 RecID(RecID 是列的名称)= 32375 以及 RecID=11174 <-- 即使它不是上面指定的 ComNum 但必须在指定日期之间的整个记录
  5. 并跳过 RecID=24425 的记录

我尝试过这样的事情,但这是错误的:

SELECT * FROM FDetail 
WHERE TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#
AND ComNum=1090084785010
AND RecID=32375 
AND RecID=11174 
AND NOT RecID=24425
ORDER BY ASC

现在我会从两个查询中做到这一点?

Query 1:
SELECT * FROM FDetail 
WHERE ComNum=1090084785010
AND TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#
ORDER BY ASC 

Query 2:
SELECT * FROM FDetail 
WHERE TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#
AND RecID=32375
AND RecID=11174 
AND NOT RecID=24425
ORDER BY ASC 

这适用于 MS Access 数据库,但我也想知道如何在 MS SQL 中执行此操作,(除非唯一的区别是日期的 #)

一如既往,非常感谢您为我提供的任何帮助。我非常感谢这个社区和你们所有努力帮助他人的伟大人物。

4

6 回答 6

3
SELECT * FROM FDetail 
WHERE 
    TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#
AND (
        (ComNum=1090084785010 AND RecID <> 24425)
    OR  (RecID=32375 OR RecID=11174)
    )
ORDER BY ASC

希望它有帮助,rgds。

于 2012-06-01T16:10:44.283 回答
2

听起来你想要这样的东西(在 Access 中):

SELECT * FROM FDetail  
WHERE TransactionDate >= #01/01/2007# 
AND TransactionDate <= #01/01/2015# 
AND (ComNum=1090084785010 OR RecID=32375 OR RecID=11174)
AND RecID<>24425 
ORDER BY ASC 

我不确定 SQL Server 会有什么不同。

这在逻辑上等同于@Sebas 接受的答案。

于 2012-06-01T16:16:36.580 回答
0

除了#你必须写AND RecID <> 24425而不是AND NOT RecID=24425在 MySQL 中。这是为了你的知识。

但是,您可以编写(RecID=32375 OR RecID=11174)并跳过该NOT部分。

所以查询将是 -

SELECT * FROM FDetail  
WHERE TransactionDate >= #01/01/2007# 
AND TransactionDate <= #01/01/2015# 
AND (ComNum=1090084785010 OR RecID=32375 OR RecID=11174)
AND RecID<>24425 
ORDER BY ASC 
于 2012-06-01T16:12:21.177 回答
0
SELECT * FROM FDetail
WHERE ComNum=1090084785010
AND TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#

UNION

SELECT * FROM FDetail 
WHERE TransactionDate >= #01/01/2007#
AND TransactionDate <= #01/01/2015#
AND RecID=32375
AND RecID=11174 
AND NOT RecID=24425
ORDER BY ASC
于 2012-06-01T16:45:50.583 回答
0

试试这个:

    SELECT * FROM FDetail
    WHERE (TransactionDate BETWEEN '01/01/2007' AND '01/01/2015')
    AND ( RecID IN (32375, 11174)
        OR (ComNum=1090084785010 AND RecID != 24425)
        );
于 2014-02-06T14:25:58.723 回答
0

尝试以下操作:
SELECT * FROM FDetail
WHERE TransactionDate >= #01/01/2007# AND TransactionDate <= #01/01/2015#)
AND (ComNum=1090084785010 OR (RecID=32375 AND RecID=11174 AND NOT RecID=24425 ))
由 ASC 订购;

您可以通过对日期范围使用“BETWEEN”运算符并在 RecID 列表中使用“IN”运算符来清除此问题,但我根据您使用的内容发布了答案。

在长比较中使用括号总是有帮助的,即使它不是必需的。

于 2014-02-07T01:08:39.860 回答