有个表
A   B  C
一  1  ni
一  2  wo
二  3  ta
二  4  shui有这么几个条件
一 A列值相同
二 在条件一的情况下根据B列最大的值取C列的值
详细点说就是,上表应该取到wo,shui两个值,因为在A列同个“一”值里,B列的“2”值最大,所以取C列的"wo",
另外个"shui"值也是一样。
可是,我不知道怎么去实现。
有没有大神可以解答下?
select 条件判断

解决方案 »

  1.   

    create table #tb(A varchar(10),B varchar(10),C varchar(10))
    insert into #tb
    select '一',1,'ni'
    union all select '一',2,'wo'
    union all select '二',3,'ta'
    union all select '二',4,'shui'
    select a.*
    from #tb a
    inner join (select A,max(B) as B from #tb group by A)b 
    on a.A=b.A and a.B=b.B
    drop table #tb/*
    一 2 wo
    二 4 shui
    */
      

  2.   


    create table tb(a nvarchar(200),b int,c nvarchar(200))insert into tb
    select '一','1','ni' union all
    select '一','2','wo' union all
    select '二','3','ta' union all
    select '二','4','shui' 
     
     
     ;with tx as(
    select *,row_number() over(partition by t.a order by t.b desc) rn 
          from tb t
    )select * from tx where tx.rn=1 order by tx.a desc;
     
      

  3.   

    --方法二:
    select a.*
    from #tb a
    where not exists(select 1 from #tb b where a.A=B.A and b.B>a.B)--方法三:sql 2005 以上
    select A,B,C
    from 
    (
    select *,rn=row_number() over(partition by A order by B desc) from #tb
    )t
    where rn=1
      

  4.   

    如果是2005的话,可以用row_number函数实现,非常简洁:
    if object_id('tb') is not null
       drop table tb
    go
     
    create table tb(a nvarchar(200),b int,c nvarchar(200))insert into tb
    select '一','1','ni' union all
    select '一','2','wo' union all
    select '二','3','ta' union all
    select '二','4','shui' 
     
    select a,b,c
    from

    select *,
           row_number() over(partition by a order by b desc) as rownum
    from tb
    )t
    where rownum = 1
    /*
    a b c
    二 4 shui
    一 2 wo
    */
     
      

  5.   

    根据你们的提点,可以实现 了,但又出现了新的问题。
    SELECT youshiSz FROM (
    SELECT xiaobanID,jixuJ,youshiSz,rownum=ROW_NUMBER() OVER(PARTITION BY xiaobanID ORDER BY jixuJ DESC) FROM Resources_XiBan)
    t WHERE t.rownum=1 ORDER BY xiaobanID这个能得到一列值。
    那我怎么将这个语句放到一个select a,b,c from ttt 的语句里面呢?(这个语句得到的值和上面语句得到的值数量相同)
    我用了union什么的,都不行。
    或者直接
    select a,b,c,
    (SELECT youshiSz FROM (
    SELECT xiaobanID,jixuJ,youshiSz,rownum=ROW_NUMBER() OVER(PARTITION BY xiaobanID ORDER BY jixuJ DESC) FROM Resources_XiBan)
    t WHERE t.rownum=1 ORDER BY xiaobanID) as d
     from ttt 
    也不行。。
      

  6.   


    这样呢:
    select a,b,c from tttunion SELECT youshiSz,null,null 
    FROM 
    (
    SELECT xiaobanID,jixuJ,youshiSz,
        rownum=ROW_NUMBER() OVER(PARTITION BY xiaobanID ORDER BY jixuJ DESC) 
    FROM Resources_XiBan
    )
    t WHERE t.rownum=1
      

  7.   

    这样写的话得到的值第一行全为null,并且只有a,b,c三个列啊
      

  8.   


    select t.* from ts1 t join 
    (
    select a,max(b) b from ts1 group by a) b on t.a=b.a and t.b=b.b
      

  9.   

    基本上是按各位的方法来的,虽然不算完美解决,但还是谢谢大家,特别是yupeigu