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

一个统计语句,用于报表解决方案

2012-04-09 
一个统计语句,用于报表现在有两个查询结果项目名称概算类型概算名称概算金额中三改造工程概算12180项目名

一个统计语句,用于报表
现在有两个查询结果

项目名称 概算类型 概算名称 概算金额
中三改造 工程概算 121 80



项目名称 合同类型 合同编号 合同名称 合同金额
中三改造 建设合同 1212 城投 100
中三改造 建设合同 45 4545 20

如何形成这样的结果

项目名称 概算类型 概算名称 概算金额 合同类型 合同编号 合同名称 合同金额
中三改造 工程概算 121 80 建设合同 1212 城投 100
  建设合同 45 4545 20 

就是这样合并查询结果
最好是实现这样的
项目名称 概算类型 概算名称 概算金额 合同类型 合同编号 合同名称 合同金额
中三改造 工程概算 121 80 建设合同 1212 城投 100
  建设合同 45 4545 20 
  小计: 80 120
  合计: 80 120
合计就是把不同项目的小计加起来

[解决办法]

SQL code
with t1 as(select '中三改造' 项目名称, '工程概算' 概算类型, '121' 概算名称, 80 概算金额),t2 as(select '中三改造' 项目名称, '建设合同' 合同类型, '1212' 合同编号,'城投' 合同名称,100 合同金额 union all select '中三改造', '建设合同', '45', '4545', 20),t3 as (select row_number() over(partition by t1.项目名称 order by getdate()) rn,t1.项目名称, t1.概算类型, t1.概算名称, cast(t1.概算金额 as varchar) 概算金额,t2.合同类型, t2.合同编号, t2.合同名称, t2.合同金额 from t1 inner join t2 on t1.项目名称=t2.项目名称),t4 as(select case when rn>1 then '' else 项目名称 end '项目名称',case when rn>1 then '' else 概算类型 end '概算类型',case when rn>1 then '' else 概算名称 end '概算名称',case when rn>1 then '' else 概算金额 end '概算金额',合同类型,合同编号,合同名称,合同金额 from t3)select * from t4union allselect '','','小计:',cast(sum(case when rn=1 then cast(概算金额 as int) else 0 end) as varchar),'','','',sum(cast(合同金额 as int)) from t3 group by 项目名称union allselect '','','合计:',cast(sum(case when rn=1 then cast(概算金额 as int) else 0 end) as varchar),'','','',sum(cast(合同金额 as int)) from t3项目名称   概算类型   概算名称  概算金额                  合同类型  合同编号 合同名称 合同金额-------- -------- ----- ------------------------------ -------- ---- ---- -----------中三改造   工程概算   121        80                     建设合同   1212   城投    100                                                      建设合同   45     4545    20                  小计:        80                                             120                  合计:        80                                             120(4 row(s) affected) 

热点排行