当前位置: 代码迷 >> Sql Server >> ? 简单语句,如何样得到下面的表 ?
  详细解决方案

? 简单语句,如何样得到下面的表 ?

热度:19   发布时间:2016-04-24 18:31:47.0
??? 简单语句,怎么样得到下面的表 ???
表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
  相关解决方案