当前位置: 代码迷 >> Sql Server >> []数据如下,要求查出某年或某月的最开始的一条记录和最后的一条记录 合并成一条
  详细解决方案

[]数据如下,要求查出某年或某月的最开始的一条记录和最后的一条记录 合并成一条

热度:11   发布时间:2016-04-24 18:39:28.0
[求助]数据如下,要求查出某年或某月的最开始的一条记录和最后的一条记录 合并成一条
部门     日期       使用金额
a部门   2014-1-2      991
a部门   2014-1-7      192
a部门   2014-1-29     953
b部门   2014-1-3      116
b部门   2014-1-22     917
b部门   2014-1-25     558

要求查询出结果 
部门   开始时间     金额   结束时间      金额
a部门   2014-1-2  991    2014-1-29    953
b部门   2014-1-3  116    2014-1-25    558

求教这么该怎么写SQL
------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-02-20 08:48:45
-- 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: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([部门] varchar(5),[日期] datetime,[使用金额] int)
insert [huang]
select 'a部门','2014-1-2',991 union all
select 'a部门','2014-1-7',192 union all
select 'a部门','2014-1-29',953 union all
select 'b部门','2014-1-3',116 union all
select 'b部门','2014-1-22',917 union all
select 'b部门','2014-1-25',558
--------------开始查询--------------------------
SELECT a.部门,a.日期1 起始日期,b.使用金额 ,a.日期2 结束日期 ,c.使用金额
FROM (
select [部门],MIN([日期])[日期1],MAX([日期])[日期2] 
from [huang]
GROUP BY [部门])a LEFT JOIN huang b on a.部门=b.部门 AND a.日期1=b.日期
left JOIN huang c on a.部门=c.部门 AND a.日期2=c.日期
----------------结果----------------------------
/* 
部门    起始日期                    使用金额        结束日期                    使用金额
----- ----------------------- ----------- ----------------------- -----------
a部门   2014-01-02 00:00:00.000 991         2014-01-29 00:00:00.000 953
b部门   2014-01-03 00:00:00.000 116         2014-01-25 00:00:00.000 558
*/
  相关解决方案