通过查询使用不同的where过滤器在同一个表中查找记录

时间:2013-12-12 06:27:03

标签: sql ms-access ms-access-2013

我有这个sales表:

ID  sid cid desciption  price   sdate
1   2   2   sadfsdf         177 11/12/2013
2   1   2   asdf            34  11/12/2013
3   2   2   asdsad          45  04/11/2013

(sid - salesmen id,cid - customer id,description - sales description,sdate - sales date)

我想找到12个月的销售情况,并发现上个月同一销售人员是否向同一客户进行了销售,并显示这些记录。

例如,从此表中输出将是:

ID  sid cid desciption  price   sdate
1   2   2   sadfsdf         177 11/12/2013
3   2   2   asdsad          45  04/11/2013

这是MS Access数据库。

我使用过此查询,但没有运气。

SELECT cid, 
       sid, 
       sdate 
FROM   sales 
WHERE  sdate > #12 / 01 / 2013 # 
       AND sdate < #12 / 31 / 2013 # 
       AND EXISTS (SELECT cid, 
                          sid, 
                          sdate 
                   FROM   sales 
                   WHERE  ( sdate > #11 / 01 / 2013 # 
                            AND sdate < #11 / 30 / 2013 # ) 
                          AND ( sales.sid = sales.sid 
                                AND sales.cid = sales.cid )) 

2 个答案:

答案 0 :(得分:1)

您可以使用GROUP BY查询来确定哪些销售人员/客户组合在12月份出现过多次。

SELECT
    s.sid,
    s.cid,
    Count(*) AS sales_count
FROM sales AS s
WHERE s.sdate BETWEEN #2013-12-01# AND #2013-12-31#
GROUP BY
    s.sid,
    s.cid
HAVING Count(*) > 1;

如果您想查看这些完整的销售记录,请将该查询加入sales表,方法是加入sidcid并应用相同的sdate过滤条件

答案 1 :(得分:0)

这是我自己发现的答案。 谢谢大家尝试过并努力...

SELECT cid, sid, sdate,price
FROM sales AS t1
WHERE sdate > #11/01/2013# and sdate < #11/30/2013# AND  Exists 
(Select cid,sid,sdate from sales as t2 where (sdate > #12/01/2013# and sdate < #12/30/2013#) and (t1.sid = t2.sid and t1.cid = t2.cid));

感谢

相关问题