表TB
pid,pname,rule,rem
1, 'XX','20×10',null
1, 'XX',null,null
2, 'YY',  null,null
2, 'YY','11*11','hello'
...
-
需要结果:
1, 'XX','20×10',null
2, 'YY','11*11','hello'
就是说相同的pid只留下一条记录,留下的规则是rule,或者rem有值的记录,如果都没值,就随便取一条。

解决方案 »

  1.   

    select * from tb where rule is not null
      

  2.   

    这个是不行的,如果二个相同的pid的rule都有值的话,就查出二条了。
      

  3.   

    select pid,pname,[rule]=max([rule]),rem=max(rem) from [TB]
    group by pid,pname
      

  4.   

    select * from tb where rule is not null  group by pid,pname,rule,rem 
      

  5.   

    我用这个出现语法错误。我用的是ACCESS,
    意思就是你写的这样的。但是好像ACCESS不支持[rule]=max([rule]),rem=max(rem)这种写法。
      

  6.   

    五楼的可能是在SQLSERVER里面可以, 我在ACCESS里面试了不行啊
      

  7.   

    Microsoft JET Database Engine (0x80040E14)
    语法错误 (操作符丢失) 在查询表达式 '[rule]=max[rule]'
      

  8.   

    [rule]=max[rule]  应该为:[rule]=max([rule])
      

  9.   

    要用到 while loop啊具体的自己写。
      

  10.   

    解决了。
    原来Access中要这样
    select pid,pname,max(rule) as a,max(rem) as b from [TB]
    group by pid,pname