资金管理系统常用的一种报表SQL语句求解,高手前辈请进

低代码开发平台 2008-10-24 10:22:27
最近有个项目,其中遇到如下一个表,表结构如下:
单据汇合表BillUnion (制单时间,付款类型,单据类型,单据名称,单据号,单据金额,组织机构,申请人)分别对应下面的SQL创建语句。
Create table BillUnion
(
MakeTime DateTime,
ActionType varchar(20),
BillType varchar(10),
SmallType varchar(50),
BillID varchar(20),
TotalMoney float,
OrganizationID int,
EmployeePP varchar(20)
)
为了便于大家测试,我插入几个记录:
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010101',100,1,'小刘')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010102',150,1,'小王')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','付款','经营活动','商品采购','SPCG2008010101',200,1,'小王')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','商品采购','SPCG2008010201',100,1,'小王')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','收款','经营活动','商品销售','SPXS2008010201',100,1,'小吴')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','费用报销','FYBX2008010201',50,1,'小吴')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','商品采购','SPCG2008010301',150,1,'小王')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','收款','经营活动','商品销售','SPXS2008010301',500,1,'小吴')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010301',150,1,'小吴')


Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010401',200,1,'小刘')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010402',150,1,'小王')

Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','付款','经营活动','商品采购','SPCG2008010401',100,1,'小王')
插入数据后,Select * from BillUnion可以看到查询的结果。但我要求的报表格式如下:

制单时间 支出方向 单据类型 单据名称 单据号 单据金额 组织机构 申请人
2008-1-1 收款 经营活动 商品销售 SPXS2008010101 100.0 1 小刘
2008-1-1 收款 经营活动 商品销售 SPXS2008010102 150.0 1 小王
2008-1-1 付款 经营活动 商品采购 SPCG2008010101 200.0 1 小王
日合计 100+150-200=50 收款金额-付款金额
2008-1-2 付款 经营活动 商品采购 SPCG2008010201 100.0 1 小王
2008-1-2 收款 经营活动 商品销售 SPXS2008010201 100.0 1 小吴
2008-1-2 付款 经营活动 费用报销 FYBX2008010201 50.0 1 小吴
日合计 100+100-50=150 收款金额-付款金额
2008-1-3
日合计:
有哪位数据方面比较厉害前辈的能给个思路吗?



...全文
94 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-10-25
  • 打赏
  • 举报
回复

/*
标题:普通行列转换(version 2.0)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-03-09
地点:广东深圳
说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go

--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名

--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)

--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')

---------------------------------

/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
*/

--SQL SERVER 2000 静态SQL。
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
cast(avg(分数*1.0) as decimal(18,2)) 平均分,
sum(分数) 总分
from tb
group by 姓名

--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名'
exec(@sql)

--SQL SERVER 2005 静态SQL。
select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b) m,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名')

drop table tb

------------------
------------------

/*
问题:如果上述两表互相换一下:即表结构和数据为:
姓名 语文 数学 物理
张三 74  83  93
李四 74  84  94
想变成(得到如下结果):
姓名 课程 分数
---- ---- ----
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
--------------
*/

create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)
insert into tb values('张三',74,83,93)
insert into tb values('李四',74,84,94)
go

--SQL SERVER 2000 静态SQL。
select * from
(
select 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 , 课程 = '物理' , 分数 = 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end

--SQL SERVER 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')

--SQL SERVER 2005 动态SQL。
select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t

--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。

--------------------
/*
问题:在上述的结果上加个平均分,总分,得到如下结果:
姓名 课程 分数
---- ------ ------
李四 语文 74.00
李四 数学 84.00
李四 物理 94.00
李四 平均分 84.00
李四 总分 252.00
张三 语文 74.00
张三 数学 83.00
张三 物理 93.00
张三 平均分 83.33
张三 总分 250.00
------------------
*/

select * from
(
select 姓名 as 姓名 , 课程 = '语文' , 分数 = 语文 from tb
union all
select 姓名 as 姓名 , 课程 = '数学' , 分数 = 数学 from tb
union all
select 姓名 as 姓名 , 课程 = '物理' , 分数 = 物理 from tb
union all
select 姓名 as 姓名 , 课程 = '平均分' , 分数 = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb
union all
select 姓名 as 姓名 , 课程 = '总分' , 分数 = 语文 + 数学 + 物理 from tb
) t
order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end

drop table tb
  • 打赏
  • 举报
回复
还有一种。如果我要的报表是这样的又该如何实现呢:
组织 收款(下面的列示固定的) 付款(付款下面的列是固定的) 余额
机构 商品销售 税费返还 其他经营 商品采购 工资福利 费用报销 各种税费
1 1200 0 0 550 0 200 0 450
  • 打赏
  • 举报
回复
还有一种。如果我要的报表是这样的又该如何实现呢:
组织 收款(下面的列示固定的) 付款(付款下面的列是固定的) 余额
机构 商品销售 税费返还 其他经营 商品采购 工资福利 费用报销 各种税费
1 1200 0 0 550 0 200 0 450






  • 打赏
  • 举报
回复
还有一种。如果我要的报表是这样的又该如何实现呢:
组织机构 收款(下面的列示固定的) 付款(付款下面的列是固定的) 余额
商品销售 税费返还 其他经营 商品采购 工资福利 费用报销 各种税费
1 1200 0 0 550 0 200 0 450






dawugui 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 stone0419 的回复:]
简单说明问题吧,就是有个表有如下的数据:
日期 活动类型 金额
1月1日 收款 100
1月1日 收款 200
1月1日 付款 100
1月2日 付款 200
1月2日 收款 400
1月3日 付款 200
变成下面的样子
日期 活动类型 金额
1月1日 收款 100
1月1日 收款 200
1月1日 付款 100
日合计: 200
1月2日 付款 200
1月2日 收款 400
日合计: 200
1月3日 付款 200
日合计: -200
月合计: 200[/Quote]
Create table tb
(
MakeTime DateTime,
ActionType varchar(20),
BillType varchar(10),
SmallType varchar(50),
BillID varchar(20),
TotalMoney float,
OrganizationID int,
EmployeePP varchar(20)
)
Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010101',100,1,'小刘')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010102',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','付款','经营活动','商品采购','SPCG2008010101',200,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','商品采购','SPCG2008010201',100,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','收款','经营活动','商品销售','SPXS2008010201',100,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','费用报销','FYBX2008010201',50,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','商品采购','SPCG2008010301',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','收款','经营活动','商品销售','SPXS2008010301',500,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010301',150,1,'小吴')


Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010401',200,1,'小刘')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010402',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','付款','经营活动','商品采购','SPCG2008010401',100,1,'小王')
go
select * from
(
select convert(varchar(10),maketime,120) maketime, ActionType,TotalMoney from tb
union all
select convert(varchar(10),maketime,120) maketime, ActionType ='日合计' , TotalMoney= sum(case ActionType when '收款' then TotalMoney else -TotalMoney end) from tb group by convert(varchar(10),maketime,120)
union all
select convert(varchar(7),maketime,120) + '月合计' maketime, ActionType = '' , TotalMoney= sum(case ActionType when '收款' then TotalMoney else -TotalMoney end) from tb group by convert(varchar(7),maketime,120) + '月合计'
) t
order by maketime , case ActionType when '月合计' then 3 when '日合计' then 2 else 1 end , ActionType
drop table tb

/*
maketime ActionType TotalMoney
------------- -------------------- -----------------------------------------------------
2008-01-01 付款 200.0
2008-01-01 收款 100.0
2008-01-01 收款 150.0
2008-01-01 日合计 50.0
2008-01-02 付款 100.0
2008-01-02 付款 50.0
2008-01-02 收款 100.0
2008-01-02 日合计 -50.0
2008-01-03 付款 150.0
2008-01-03 付款 150.0
2008-01-03 收款 500.0
2008-01-03 日合计 200.0
2008-01-04 付款 100.0
2008-01-04 收款 150.0
2008-01-04 收款 200.0
2008-01-04 日合计 250.0
2008-01月合计 450.0

(所影响的行数为 17 行)
*/
  • 打赏
  • 举报
回复
非常感谢dawugui ,CN_SQL 俩位兄弟的解答。如果还要做月结了。怎么实现
  • 打赏
  • 举报
回复
简单说明问题吧,就是有个表有如下的数据:
日期 活动类型 金额
1月1日 收款 100
1月1日 收款 200
1月1日 付款 100
1月2日 付款 200
1月2日 收款 400
1月3日 付款 200
变成下面的样子
日期 活动类型 金额
1月1日 收款 100
1月1日 收款 200
1月1日 付款 100
日合计: 200
1月2日 付款 200
1月2日 收款 400
日合计: 200
1月3日 付款 200
日合计: -200
月合计: 200
dawugui 2008-10-24
  • 打赏
  • 举报
回复
Create table tb
(
MakeTime DateTime,
ActionType varchar(20),
BillType varchar(10),
SmallType varchar(50),
BillID varchar(20),
TotalMoney float,
OrganizationID int,
EmployeePP varchar(20)
)
Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010101',100,1,'小刘')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010102',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','付款','经营活动','商品采购','SPCG2008010101',200,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','商品采购','SPCG2008010201',100,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','收款','经营活动','商品销售','SPXS2008010201',100,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','费用报销','FYBX2008010201',50,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','商品采购','SPCG2008010301',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','收款','经营活动','商品销售','SPXS2008010301',500,1,'小吴')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010301',150,1,'小吴')


Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010401',200,1,'小刘')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','收款','经营活动','商品销售','SPXS2008010402',150,1,'小王')

Insert into tb(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','付款','经营活动','商品采购','SPCG2008010401',100,1,'小王')
go
select * from
(
select convert(varchar(10),maketime,120) maketime, ActionType,BillType,SmallType,BillID,TotalMoney,OrganizationID,EmployeePP from tb
union all
select convert(varchar(10),maketime,120) maketime, ActionType ='合计' , BillType= cast(sum(case ActionType when '收款' then TotalMoney else -TotalMoney end) as varchar),SmallType='',BillID='',TotalMoney=0,OrganizationID=0,EmployeePP='' from tb group by convert(varchar(10),maketime,120)
) t
order by maketime , case ActionType when '合计' then 2 else 1 end
drop table tb

/*
maketime ActionType BillType SmallType BillID TotalMoney OrganizationID EmployeePP
---------- -------------------- ------------------------------ -------------------------------------------------- -------------------- ----------------------------------------------------- -------------- --------------------
2008-01-01 收款 经营活动 商品销售 SPXS2008010101 100.0 1 小刘
2008-01-01 收款 经营活动 商品销售 SPXS2008010102 150.0 1 小王
2008-01-01 付款 经营活动 商品采购 SPCG2008010101 200.0 1 小王
2008-01-01 合计 50 0.0 0
2008-01-02 付款 经营活动 商品采购 SPCG2008010201 100.0 1 小王
2008-01-02 收款 经营活动 商品销售 SPXS2008010201 100.0 1 小吴
2008-01-02 付款 经营活动 费用报销 FYBX2008010201 50.0 1 小吴
2008-01-02 合计 -50 0.0 0
2008-01-03 付款 经营活动 费用报销 FYBX2008010301 150.0 1 小吴
2008-01-03 付款 经营活动 商品采购 SPCG2008010301 150.0 1 小王
2008-01-03 收款 经营活动 商品销售 SPXS2008010301 500.0 1 小吴
2008-01-03 合计 200 0.0 0
2008-01-04 收款 经营活动 商品销售 SPXS2008010401 200.0 1 小刘
2008-01-04 收款 经营活动 商品销售 SPXS2008010402 150.0 1 小王
2008-01-04 付款 经营活动 商品采购 SPCG2008010401 100.0 1 小王
2008-01-04 合计 250 0.0 0

(所影响的行数为 16 行)
*/
CN_SQL 2008-10-24
  • 打赏
  • 举报
回复
输出结果:


2008-01-01 00:00:00.000 收款 经营活动 商品销售 SPXS2008010101 100 1 小刘
2008-01-01 00:00:00.000 收款 经营活动 商品销售 SPXS2008010102 150 1 小王
2008-01-01 00:00:00.000 付款 经营活动 商品采购 SPCG2008010101 200 1 小王
2008-01-01 00:00:00.000 50 0 日合计
2008-01-02 00:00:00.000 付款 经营活动 商品采购 SPCG2008010201 100 1 小王
2008-01-02 00:00:00.000 收款 经营活动 商品销售 SPXS2008010201 100 1 小吴
2008-01-02 00:00:00.000 付款 经营活动 费用报销 FYBX2008010201 50 1 小吴
2008-01-02 00:00:00.000 -50 0 日合计 --你给的测试数据有误,所以这里不是你说的50
2008-01-03 00:00:00.000 付款 经营活动 商品采购 SPCG2008010301 150 1 小王
2008-01-03 00:00:00.000 收款 经营活动 商品销售 SPXS2008010301 500 1 小吴
2008-01-03 00:00:00.000 付款 经营活动 费用报销 FYBX2008010301 150 1 小吴
2008-01-03 00:00:00.000 200 0 日合计
2008-01-04 00:00:00.000 收款 经营活动 商品销售 SPXS2008010401 200 1 小刘
2008-01-04 00:00:00.000 收款 经营活动 商品销售 SPXS2008010402 150 1 小王
2008-01-04 00:00:00.000 付款 经营活动 商品采购 SPCG2008010401 100 1 小王
2008-01-04 00:00:00.000 250 0 日合计
CN_SQL 2008-10-24
  • 打赏
  • 举报
回复

select
*
from(
select
MakeTime,
ActionType,
BillType,
SmallType,
BillID,
TotalMoney,
OrganizationID,
EmployeePP
from BillUnion
union all
select
a.MakeTime,
'',
'',
'',
'',
TotalMoney = sum(case ActionType when '收款' then TotalMoney else (-1 * TotalMoney) end),
0,
'日合计'
from BillUnion a
group by a.MakeTime
)a
order by MakeTime,OrganizationID DESC



你非要排版,这样好了。
  • 打赏
  • 举报
回复
我的这个问题,跟有位朋友问的有点类似(他的问题如下:),不过似乎要复杂点,
因为我的统计金额的时候不是全加,而是有加有减
如下表:
产品编码 色号 颜色
110 白
110 1 白
110 1 白
111 白
111 1
111 1
111 1 白
111 1 白
111 1 白

输出如下表:
产品编码 色号 颜色 数量
111 1 白 3
111 1 2
111 白 1
合计 6
110 1 白 2
110 白 1
合计 3
总计 9

CN_SQL 2008-10-24
  • 打赏
  • 举报
回复
.........这样的排版格式,你应该在程序端去处理方便一些。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧