数据表的数据如下
ID   产品名称  年份
1    产品1     2003
2    产品1     2004
3    产品1     2005
4    产品1     2006
5    产品2     2004
6    产品2     2005
7    产品2     2006
8    产品3     2005
9    产品3     2006
10   产品3     2007
11   产品3     2008
=========================
如何写一条SQL语句,得到 这3个产品共有的年份,从上表数据看,应该得到的数据为2005 2006  然后把这个年份的数据绑定到DropDownList控件里。

解决方案 »

  1.   

    select  year  from table group by year having count(distinct(goodsname))>2
      

  2.   

    select 年份 from 表 group by 产品名称,年份
      

  3.   


    create table Product
    (
    name nvarchar(100),
    year int
    )insert into Product values('产品1','2003')
    insert into Product values('产品1','2004')
    insert into Product values('产品1','2005')
    insert into Product values('产品1','2006')
    insert into Product values('产品2','2004')
    insert into Product values('产品2','2005')
    insert into Product values('产品2','2006')
    insert into Product values('产品3','2005')
    insert into Product values('产品3','2006')
    insert into Product values('产品3','2007')
    insert into Product values('产品3','2008')
    select year from Product 
    group by year 
    having count(year)=3
      

  4.   

    select year from Product 
    group by year 
    having count(year)>=2
      

  5.   

    select year from table group by year having count(distinct(goodsname))>2
      

  6.   

    能解释一下,having count(distinct(goodsname))>2
    这句是什么意思?
      

  7.   

    用内置函数  distinct 来查询列明就出来了 只查询不同的列值 
      

  8.   

    是 select * from product where year in (select year from product as p group by year having count(year)>2)select year from product as p group by year(按年排序) + having count(year)>2(年份出现次数大于2)
      

  9.   

    having count(distinct(goodsname))=3
    3就是产品的个数,如果你不知道有多少产品,应该把3换成产品的distinct
      

  10.   

    =================
    还是不明白,我上面列的只是部分数据,产品很多,年份也很多。
    所以先问一下having count(distinct(goodsname))>2 这句取什么作用?
      

  11.   

    取出所有商品共有的年份
    select year from table group by year having count(distinct(goodsname))=(select count(distinct(goodsname)))
      

  12.   

    select year from table group by year having count(distinct(goodsname))>2
      

  13.   

    只有一个产品的话 就不显示了,因为不符合你的结果
    select year from table group by year having count(distinct(goodsname))=3
      

  14.   


    测试数据改成
    insert into Product values('产品1','2003')
    insert into Product values('产品1','2004')
    insert into Product values('产品1','2005')
    insert into Product values('产品1','2006')
    insert into Product values('产品2','2004')
    insert into Product values('产品1','2005')
    insert into Product values('产品2','2006')
    insert into Product values('产品1','2005')
    insert into Product values('产品3','2006')
    insert into Product values('产品3','2007')
    insert into Product values('产品3','2008')你就会发现问题了  2005 不应该出现
      

  15.   

    分组查询
    group by year
      

  16.   

    int n;
    select year from table group by year having count(distinct(goodsname))=n刚测试了一下  没的问题 有问题再解决
      

  17.   

    那你做个 text框让输进去n 不就可以了  
      

  18.   

    select year from table group by year having count(distinct(goodsname))>=2不就结了
      

  19.   

    select year from table group by year having count(distinct(goodsname))>=2不就结了
    ===================
    如果只有一个产品情况下呢?
      

  20.   

    select year from Product group by year
     having count(distinct(name ))=(select count(distinct(name )) from Product)
      

  21.   

    在大家的努力下终于搞定了。
    aa是传来的参数,比如1,2,88,
    string bb = (System.Convert.ToInt32(aa.Split(',').Length.ToString()) - 1).ToString();
    strSel1 += "and (" + sql1 + ") group by nian having count(distinct(cp_id))="+bb+" order by nian asc";
    =============
    整整测试我的一个下午啊,但还是值得的。
    谢谢大家了
      

  22.   

    ============
    其实这个答案也是对的,只不过,我这里是接收传来的cp_id的个数。
    但道理是一样的。