----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-30 07:42:05
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[Tb_A]
if object_id('[Tb_A]') is not null drop table [Tb_A]
go 
create table [Tb_A]([A] varchar(1),[B] int,[C] varchar(1),[D] varchar(1),[f] datetime)
insert [Tb_A]
select 'a',1,'w','b','2013-05-10' union all
select 'a',2,'x','y','2013-06-10' union all
select 'a',3,'z','t','2013-07-10' union all
select 'b',2,'g','t','2013-05-10' union all
select 'b',1,'m','h','2013-05-13' union all
select 'b',5,'u','q','2013-06-10'
--------------开始查询--------------------------
SELECT a,SUM(b)B,MAX(CASE WHEN oid=1 THEN c ELSE NULL END )C,MAX(CASE WHEN oid2=1 THEN d ELSE NULL END )D
FROM (
select a,b,c,d,f,ROW_NUMBER()OVER(PARTITION BY a ORDER BY c)oid,ROW_NUMBER()OVER(PARTITION BY a ORDER BY f desc)oid2
from [Tb_A])a 
GROUP BY a/*
a    B           C    D
---- ----------- ---- ----
a    6           w    t
b    8           g    q
*/

解决方案 »

  1.   

    if object_id('[Tb_A]') is not null drop table [Tb_A]
    go 
    create table [Tb_A]([A] varchar(1),[B] int,[C] varchar(1),[D] varchar(1),[f] datetime)
    insert [Tb_A]
    select 'a',1,'w','b','2013-05-10' union all
    select 'a',2,'x','y','2013-06-10' union all
    select 'a',3,'z','t','2013-07-10' union all
    select 'b',2,'g','t','2013-05-10' union all
    select 'b',1,'m','h','2013-05-13' union all
    select 'b',5,'u','q','2013-06-10'
    go
    select a,SUM(b) as b,
           max(case when rownum = 1 then c else null end) as c,
           MAX(case when rownum = a_count then d else null end) as d
    from 
    (
    select *,
           ROW_NUMBER() over(partition by a order by f) as rownum,
           count(*) over(partition by a) as a_count
    from Tb_A
    )t
    where rownum in (1,a_count)
    group by a
    /*
    a b c d
    a 4 w t
    b 7 g q
    */