;WITH CTE AS(
SELECT ROW_NUMBER()OVER(PARTITION BY A ORDER BY GETDATE())RN
,*
FROM TB
)
SELECT T1.A,SUM(T1.B)B,T2.C,T2.D
FROM TB T1
JOIN CTE T2 ON T1.A=T2.A AND T2.RN=1
GROUP BY T1.A,T2.C,T2.D你最好有一个,A相同时,指定顺序的列

解决方案 »

  1.   

    ;WITH CTE AS
    (
    SELECT ROW_NUMBER() OVER (PARTITION BY A ORDER BY (SELECT 1)) AS ROW,
       *,
       SUM(B) OVER (PARTITION BY A) AS BSum
    FROM TBA 
    )
    SELECT A,BSum,C,D
    FROM CTe 
    WHERE ROW = 1
      

  2.   

    看你表有没有这个列,就是当A都相同时,然后根据这个列,比如取这列最大值的那行
    比如你的数据
    A                         B                              C                               D                               E
    --------------------------------------------------------------------------------------------
    1                          10                            ACD                          张三                         2
    1                          10                            ACD                          张三Mr                     1
    当A相同时,根据E列的不同来决定取哪一列,
    如果没有这一列,想根据从上往下的顺序取上面第一列,
    在很多情况下是不准确的,SQL SERVER返回的数据不一定会按照这个顺序因此,我问的是,有没有类似E列这个功能的列
      

  3.   


    create table ew(A int,B int,C varchar(10),D varchar(10))insert into ew
     select 1,10,'ACD','张三' union all
     select 2,10,'SEC','李四Miss' union all
     select 1,10,'ACD','张三Mr' union all
     select 2,10,'SEC','李四' union all
     select 3,10,'CCB','小明' union all
     select 4,10,'MCB','Mika' union all
     select 5,10,'DDA','John' union all
     select 3,10,'CCB','小明MSS' union all
     select 5,10,'DDA','John Mr'
    select t1.A,t1.B,t2.C,t2.D
    from 
    (select A,
            sum(B) 'B'
     from ew
     group by A) t1
    inner join
    (select A,C,D,
            row_number() over(partition by A order  by getdate()) 'rn' 
     from ew) t2 on t1.A=t2.A
    where t2.rn=1/*
    A           B           C          D
    ----------- ----------- ---------- ----------
    1           20          ACD        张三Mr
    2           20          SEC        李四Miss
    3           20          CCB        小明
    4           10          MCB        Mika
    5           20          DDA        John(5 row(s) affected)
    */
      

  4.   

    如果没有,那就用GETDATE()让数据库自己去选吧,大多数情况是可靠的视图如下CREATE VIEW VIEWNAME
    AS
    WITH CTE AS(
    SELECT ROW_NUMBER()OVER(PARTITION BY A ORDER BY GETDATE())RN
    ,*
    FROM TB
    )
    SELECT T1.A,SUM(T1.B)B,T2.C,T2.D
    FROM TB T1
    JOIN CTE T2 ON T1.A=T2.A AND T2.RN=1
    GROUP BY T1.A,T2.C,T2.D