首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求二条综合查询语句

2012-09-08 
求2条综合查询语句T1流水号类型金额状态1现金10有效2支票10有效3转账10有效4支票10作废5现金10作废..T2//

求2条综合查询语句
T1
流水号 类型 金额 状态
1 现金 10 有效
2 支票 10 有效
3 转账 10 有效
4 支票 10 作废
5 现金 10 作废
..
T2//只记录支票的信息(现金和转账不记录)
流水号 实扣
2 5
..

第一个结果
流水号范围 总单据数 有效数 合计金额 现金 非现金 无效数
1-5 5 3 30 15 15 2
注意,第二条数据,由于实扣是5,但金额是10,所以有5元当做现金计算


第二个结果
类型分类 单据数 合计 现金 非现金
现金 1 10 10 0
支票 1 10 5 5
转账 1 10 0 10



[解决办法]
select cast(min(t1.流水号) as varchar(50))+'-'+cast(max(t1.流水号) as varchar(50)) 流水号范围
,count(*) 总单据数
,sum(case 状态 when '有效' then 1 else 0 end) 有效数
,sum(case 状态 when '有效' then 金额 else 0 end) 合计金额
,sum(case 状态 when '有效' then (case 类型 when '现金' then 金额 when 支票 then 金额-t2.实扣 else 0 end) else 0 end) 现金
,sum(case 状态 when '有效' then (case 类型 when '转账' then 金额 when 支票 then t2.实扣 else 0 end) else 0 end) 非现金
,sum(case 状态 when '有效' then 0 else 1 end) 无效数
from t1 left join t2 on t1.流水号=t2.流水号
[解决办法]

SQL code
--1select [流水号范围]=cast((select min([流水号]) from t1) as varchar(10))+'-'+cast((select max([流水号]) from t1) as varchar(10)), [总单据数]=(select count(*) from t1), [有效数]=(select count(*) from t1 where [状态]='有效'), [合计金额]=(select sum(金额) from t1 where [状态]='有效'), [现金]=(select sum(t1.金额-isnull(t2.实扣,0)) from t1 left join t2 on t1.[流水号]=t2.[流水号] where t1.[状态]='有效' and t1.[类型] in ('现金','支票')) [非现金]=(select sum(金额) from t1 where [状态]='有效' and 类型<>'现金')            -(select sum(t1.金额-t2.实扣) from t1,t2 where  t1.[流水号]=t2.[流水号] and t1.[状态]='有效' and t1.[类型]='支票')  [无效数]=(select count(*) from t1 where [状态]='作废')--2select 类型 as 类型分类,count(*) as 单据数,sum(t1.金额) as 合计,    sum(case when 类型='现金' then t1.金额         when 类型='支票' then t1.金额-isnull(t2.实扣,0) else 0 end as 现金,    sum(case when 类型='支票' then isnull(t2.实扣,0) when 类型='转账' then t1.金额 else 0 end as 非现金from t1 left join t2 on t1.[流水号]=t2.[流水号 where [状态]='有效' 

热点排行