现在有两个查询结果
项目名称 概算类型 概算名称 概算金额
中三改造 工程概算 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)