日期:2014-05-18  浏览次数:20329 次

哪位大神解决这个统计问题
现在有两个查询结果

项目名称 概算类型 概算名称 概算金额
中三改造 工程概算 121 80
中三改造 征地拆迁 565 50


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

如何形成这样的结果

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

就是一个项目有多个概算,也有多个合同,想把概算和合同放在一起显示,如果用连接的话 就有4条记录了

------解决方案--------------------
SQL code
--sql 2000
select isnull(m.项目名称,n.项目名称) 项目名称,
       m.概算类型 ,
       m.概算名称 ,
       m.概算金额 , 
       n.合同类型 ,
       n.合同编号 ,
       n.合同名称 ,
       n.合同金额
from
(select t.* , px = (select count(1) from t1 where 项目名称 = t.项目名称 and 概算类型 < t.概算类型) + 1 from t1 t) m
full join
(select t.* , px = (select count(1) from t2 where 项目名称 = t.项目名称 and 概算类型 < t.概算类型) + 1 from t2 t) n
on m.项目名称 = n.项目名称 and m.px = n.px

------解决方案--------------------
SQL code

--> 测试数据:[tbl1]
if object_id('[tbl1]') is not null drop table [tbl1]
create table [tbl1]([项目名称] varchar(8),[概算类型] varchar(8),[概算名称] int,[概算金额] int)
insert [tbl1]
select '中三改造','工程概算',121,80 union all
select '中三改造','征地拆迁',565,50
--> 测试数据:[tbl2]
if object_id('[tbl2]') is not null drop table [tbl2]
create table [tbl2](
[项目名称] varchar(8),
[合同类型] varchar(8),
[合同编号] int,
[合同名称] varchar(4),
[合同金额] int
)
insert [tbl2]
select '中三改造','建设合同',1212,'城投',100 union all
select '中三改造','建设合同',45,'4545',20


select a.项目名称,a.概算类型,a.概算名称,a.概算金额,
b.合同类型,b.合同编号,b.合同名称,b.合同金额 from(
select ROW_NUMBER()over(order by getdate()) as id,* from [tbl1])a
inner join(
select ROW_NUMBER()over(order by getdate()) as id,* from [tbl2])b
on a.项目名称=b.项目名称 and a.id=b.id

/*
项目名称    概算类型    概算名称    概算金额    合同类型    合同编号    合同名称    合同金额
中三改造    工程概算    121    80    建设合同    1212    城投    100
中三改造    征地拆迁    565    50    建设合同    45    4545    20
*/

------解决方案--------------------
探讨
SQL code
--sql 2000
select isnull(m.项目名称,n.项目名称) 项目名称,
m.概算类型 ,
m.概算名称 ,
m.概算金额 ,
n.合同类型 ,
n.合同编号 ,
n.合同名称 ,
n.合同金额
from
(select t.* , px =……