----------------------------------------------------------------
-- 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
*/
-- 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
*/
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
*/