表T1,想得到T2的结果集,如查询日期为:2013-01-25,其T2序号只显示用,第一条要把查询日期之前的所有金额累计作为第一条,其余为当日流水、当日合计、总累计,用语句怎样得到下面的表
id 项目 金额 日期
1 李 5 2013-01-10
2 李 15 2013-01-15
3 张 10 2013-01-20
4 李 1 2013-01-25
5 李 2 2013-01-25
6 赵 3 2013-01-25
SQL想得到如下T2,查询日期为:2013-01-25
序号 项目 金额
0 呈前 25
1 李 1
2 李 2
3 赵 3
合计 6
累计 31
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-02-28 11:05:21
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[项目] varchar(2),[金额] int,[日期] datetime)
insert [tb]
select 1,'李',5,'2013-01-10' union all
select 2,'李',15,'2013-01-15' union all
select 3,'张',10,'2013-01-20' union all
select 4,'李',1,'2013-01-25' union all
select 5,'李',2,'2013-01-25' union all
select 6,'赵',3,'2013-01-25'
--------------开始查询--------------------------
SELECT 序号=identity(INT,1,1),* INTO #tb FROM tb
SELECT '0' AS 序号,'呈前' AS 项目,SUM(金额) AS 金额 FROM TB WHERE 日期<'2013-01-25'
UNION ALL
SELECT LTRIM(序号),项目,金额 FROM #tb WHERE 日期='2013-01-25'
UNION ALL
SELECT '合计','',SUM(金额) FROM tb WHERE 日期='2013-01-25'
UNION ALL
SELECT '累计','',SUM(金额) FROM tb
DROP TABLE #tb
----------------结果----------------------------
/* 序号 项目 金额
------------------------ ---- -----------
0 呈前 30
1 李 1
2 李 2
3 赵 3
合计 6
累计 36
(6 行受影响)
*/
------解决方案--------------------
SQL2000的方法,
create table T1
(id int,项目 varchar(10),金额 int,日期 varchar(15))
insert into T1
select 1,'李',5,'2013-01-10' union all
select 2,'李',15,'2013-01-15' union all
select 3,'张',10,'2013-01-20' union all
select 4,'李',1,'2013-01-25' union all
select 5,'李',2,'2013-01-25' union all
select 6,'赵',3,'2013-01-25'
declare @x varchar(15)
select @x='2013-01-25'
select '0' '序号',
'呈前' '项目',
sum(金额) '金额'
from T1
where 日期<@x
union all
select rtrim(id-(select min(id)-1 from T1 where 日期=@x)),
项目,
金额
from T1
where 日期=@x
union all
select '合计','',sum(金额) from T1 where 日期=@x
union all
select '累计','',sum(金额) from T1
/*
序号 项目 金额
------------ ---------- -----------
0 呈前 30