zoukankan      html  css  js  c++  java
  • distinct的问题

    经常会有朋友问到类似于这样的问题,
    表中的数据如下
    ID   AA   BB    
    1    123   456
    1    4535 54
    1    60     6564
    1    60     656
    2    50     664
    2    60     6
    3    89     89
    4    40     4242
    希望得到的结果是
    ID   AA   BB
    1    123   456
    2    50     664
    3    89     89
    4    40     4242
    当然了,环境是SQL Server
    解答及分析如下:
    1, 不少朋友希望用distinct就解决问题,但不可能,disctinct将重复的记录忽略,
    但它忽略的是完全一致的重复记录,而不是其中某个字段重复的记录,所以也只有
    这样的语法
    select distinct ID,AA,BB from tName
    其它诸如select distinct(ID),AA,BB from tName 或
    select ID,distinct AA,BB的写法都是无效的
    2, 使用group by和聚合函数
    select ID,MAX(AA) AS AA,MAX(BB) AS BB from tName group by ID
    可以得到如下结果
    ID   AA   BB
    1    4535 6564
    2    60   664
    3    89   89
    4    40   4242
    ID是唯一了,但不一定后面的字段是同一条记录的
    3, 使用临时表
    select IDENTITY(INT,1,1) as TID,ID,AA,BB into #Tmp from tName
    select t1.ID,t1.AA,t1.BB from #Tmp t1 where t1.TID in
    (select min(T2.TID) from #Tmp t2 group by t2.ID)
    这样可以得到符合要求的结果
    不过用了两个T-SQL语句,
    而且如果是大数据量的话,性能问题将很突出
    到目前为止,我还没找到用一个T-SQL语句实现同样功能的方法,
    如果谁有,希望补充
  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/zijinguang/p/1250205.html
Copyright © 2011-2022 走看看