首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么去掉重复项

2012-05-20 
如何去掉重复项简单去掉重复行我会操作,但是稍微复杂一点的就迷糊了,现问题如下:单表如下(GUARANTEE):字段

如何去掉重复项
简单去掉重复行我会操作,但是稍微复杂一点的就迷糊了,现问题如下:
单表如下(GUARANTEE):
字段:PRODUCT_TYPE MODELNAME  AFFIXNAME  AFFIXSNAME  FIXDATE  FIXMAN  AFFIXID
记录:
    1       ''      语音盒   HD1600BBQ   2012-01-01 安装老大  2
  0      龙翰16     ''     ''      2011-12-08 测试老大  NULL
  0      长江S300    ''     ''      2011-12-01 测试老大  NULL
  1       ''      油量检测  ''      2011-12-01 测试老四  3
  1       ''      卸料检测HD1702XLS   2011-12-01 我饿uife  5

需求:去掉AFFIXID重复的行(值为null或数字相同就算重复,按FIXDATE降序排列,重复行保留FIXDATE最大值的行)后得到如下结果集

    1             语音盒   HD1600BBQ   2012-01-01 安装老大  2
  0      龙翰16                 2011-12-08 测试老大  NULL
  1             油量检测         2011-12-01 测试老四  3
  1             卸料检测HD1702XLS  2011-12-01 我饿uife  5
也就是去掉了第三条记录,同时结果集中还要包含其他所有字段值。
对这个数据库去重原理不太明白,能说明去重原理的更好,谢谢啦。


[解决办法]

SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'GUARANTEE')BEGIN    DROP TABLE GUARANTEEENDGOCREATE TABLE GUARANTEE(    PRODUCT_TYPE INT,    MODELNAME VARCHAR(100),    AFFIXNAME VARCHAR(100),    AFFIXSNAME VARCHAR(100),    FIXDATE VARCHAR(10),    FIXMAN VARCHAR(10),    AFFIXID INT)INSERT INTO GUARANTEESELECT 1,'','语音盒','HD1600BBQ','2012-01-01','安装老大',2 UNIONSELECT 0,'龙翰16','','','2011-12-08','测试老大',NULL UNIONSELECT  0,'长江S300','','','2011-12-01','测试老大',NULL UNIONSELECT   1,'','油量检测','','2011-12-01','测试老四',3 UNIONSELECT   1,'','卸料检测','HD1702XLS','2011-12-01','我饿uife',5SELECT * FROM GUARANTEE AS TWHERE (SELECT COUNT(*) FROM GUARANTEE WHERE ISNULL(t.AFFIXID,0) = ISNULL(AFFIXID,0) AND FIXDATE > T.FIXDATE) < 1PRODUCT_TYPE    MODELNAME    AFFIXNAME    AFFIXSNAME    FIXDATE    FIXMAN    AFFIXID0    龙翰16            2011-12-08    测试老大    NULL1        卸料检测    HD1702XLS    2011-12-01    我饿uife    51        油量检测        2011-12-01    测试老四    31        语音盒    HD1600BBQ    2012-01-01    安装老大    2
[解决办法]
去重就是删除多余的数据,但前提是你找出正确的数据来。然后:
SQL code
delete from ... where not exists ... 

热点排行