表的内容如下:表名:tbl1clm1   clm2    clm3
001    小王     高中
001    小刘     中专
002    小李     高中
003    小高     大专
003    小赵     大学
003    小甲     高中想检索出这样的结果,就是用clm1来group一下,
把clm1值相同的纪录的第一条都检索出来001    小王     高中
002    小李     高中
003    小高     大专请高手指教!

解决方案 »

  1.   


    SELECT CLM1,CLM2,CLM3
    FROM
    (SELECT ROW_NUMBER() OVER(PARTITION BY CLM1 ORDER BY CLM1) RN,TBL1.* FROM TBL1)
    WHERE RN=1
      

  2.   

    SQL> ed
    已写入 file afiedt.buf  1* create table tbl1(clm1 varchar2(10),clm2 varchar2(10),clm3 varchar2(10))
    SQL> /表已创建。SQL> insert into tbl1
      2  select '001','小王','高中' from dual
      3  union 
      4  select '001','小刘','中专' from dual
      5  union 
      6  select '002','小李','高中' from dual;已创建3行。SQL> commit;提交完成。SQL> ed
    已写入 file afiedt.buf  1  select clm1,clm2,clm3
      2  from(
      3  select clm1,clm2,clm3,rank() over(partition by clm1 order by clm3 desc) rn from tbl1)
      4* where rn=1
    SQL> /CLM1       CLM2       CLM3
    ---------- ---------- ----------
    001        小刘       中专
    002        小李       高中
      

  3.   

    分组不一定使用group by,可以使用分析函数能够较为简单的解决问题,不知道你用的是什么数据库,我使用的db2,测试成功了的
    WITH T(CLM1,CLM2,CLM3,CLM4) AS
    (
    SELECT CLM1,CLM2,CLM3,row_number()  over(partition BY clm1) AS CLM4  FROM TBL1
    )
    SELECT CLM1,CLM2,CLM3  FROM T WHERE CLM4=1;