access数据库,内容如下 表名fac
年      月     工厂
2009     1      a
2009     1      b
2009     1      c
2010     2      a
2010     3      b
现在想查询工厂a,b,c都有的年份是那一年,怎样写查询语句,谢谢大家了!

解决方案 »

  1.   

    select * from fac where 工厂 in ('a','b','c')
      

  2.   

    你的方法不正确,因为in相当与or你的语句的意思是
    select * from fac where 工厂='a' or 工厂='b'or 工厂='c'
    而我要求的是
    select * from fac where 工厂='a' and 工厂='b'and 工厂='c'我估计要用连接查询,但是不会写
      

  3.   

    如果是access数据库,一下子还真没有办法
    如果是sql server就好办多了
      

  4.   

    sql server怎么实现
    就是不好实现才在csdn提问,希望大家多帮忙
      

  5.   

    http://www.itwis.com/html/database/sqlserver/20090302/3458.html可以采用多行字符串叠加后判断
      

  6.   

    select distinct 年 
    from fac
    where 工厂='a' and  工厂='b' and 工厂='c'
      

  7.   

    你这样也不可以,你仔细看一下数据表,这样写永远也没有满足的记录,工厂是一个字段不可能同时满足等于a,b,c我认为应该用自身连接,但不会写
      

  8.   

    --oracle
    select y,sum(c)
    from(
    select y,m,decode(f,'a',1,'b',1,'c',1,0) c from fac a)
    group by y
    having sum(c)=3
    --SQL
    select y,sum(c)
    from
    (
    select y,
    case f when 'a' then 1
     when 'b' then 1
     when 'c' then 1
     else 0 end c 
    from fac) b
    group by y
    having sum(c)=3
      

  9.   

    如果y,f有重复的,需要先去除一下重复的记录
    select y,sum(c)
    from
    (
    select y,
    case f when 'a' then 1
     when 'b' then 1
     when 'c' then 1
     else 0 end c 
    from (select distinct y,f from fac) a) b
    group by y
    having sum(c)=3
      

  10.   

    access不支持case,只有iif函数,怎么写
      

  11.   

    access不支持case,只有iif函数,怎么写
      

  12.   

    谢谢大家了,我已经解决了,方法比较笨,简单说一下思路
    在accsee中新建了一个查询
    生成了一个如下所示的表
    年       a厂      b厂     c厂
    2009    1       1      1
    2010    1       1      0
    然后就比较简单了,只要把把三个厂全部是1的年选出来就可以了