这个sql怎么写(100分)

  • 主题发起人 主题发起人 erictim
  • 开始时间 开始时间
E

erictim

Unregistered / Unconfirmed
GUEST, unregistred user!
现有三个表
table1
t0 char(4) total decimal(10,2) delay decimal(10,2)
表table2
t0 char(4) total decimal(10,2)
表table3
t0 char(4) t_1 decimal(10,2) delay decimal(10,2),t_2 decimal(10,2)
其中TABLE2是原始表,TABLE1是从TABLE2中删除的记录(增加了其他的一些性质),TABLE3是准备做统计表用的,即t_1和delay存放在TABLE1表中符合条件(如t0='Z00')记录的total和delay字段的合计,而字段T_2则是存放TABLE2中符合条件(如t0='Z00')字段total的记录的合计值。
例如有下面的数据
table1
z01 12.33 12
z02 50.55 0
z03 34.33 34.5
z02 4.5 89
z01 233.4 3.4
----------------
table2
z01 324.5
z01 123.4
z02 33.44
z01 43.55
现在问,这个SQL怎么来写?
 
test it:

insert into table3(t0,t_1,delay,t_2)
select a.t0,sum(a.total),sum(a.delay),sum(b.total)
from table1 a,table2 b
group by a.t0
 
zwhc你这样做是错的啊.
我来帮你吧!
 
insert into table3
(select A.t0,A.t_1,a.delay,b.t_2 from
(select t0,sum(total) as t_1,sum(delay) as delay from table1) A,
(select t0,sum(total) as t_2, from table2) B
where A.t0=B.t0)
 
要知道,在表TABLE2和表TABLE1中,不能使用WHERE A.T0=B.T0
因为TABLE1已经不在TABLE2中了(TABLE1的数据来自TABLE2)。实际上,
我只是想将TABLE1中的数据和TABLE2数据做个统计,再存入表TABLE3中。
 
其实,完整的数据是这样的,
现在要查询的是,根据table1和 table2的字段t0的前三位来进行
即在TABLE3中的数据是满足条件(如LEFT(T0,3)=‘Z01’)的TABLE1的TOTAL,DELAY及TABLE2的TOTAL字段合计值。
例如有下面的数据
table1
t0 total delay
-----------------
z01d 12.33 12
z02r 50.55 0
z03t 34.33 34.5
z02f 4.5 89
z01f 233.4 3.4


table2
t0 total delay
----------------
z01a 324.5
z01b 123.4
z02c 33.44
z01d 43.55

我这样做
select A.t0,A.t_1,a.delay,b.t_2 from
(select t0,sum(total) as t_1,sum(delay) as delay from table1) A,
(select t0,sum(total) as t_2, from table2) B

where left(A.t0,3)=left(B.t0 ,3) --(1)
出现“Invalid Column Name 't0'错误!
将(1)换为:where a.t0 like 'z01%' and b.to like 'z01'也是同样的错误。
因为我想根据用户输入的数据来做追加
 
试试这个:
insert into table3 select a.id,sum(a.total)/2,sum(a.delay)/2,sum(b.total)/2 from table1 a left outer join table2 b on a.id=b.id group by a.id,b.id
 
不如使用存储过程来做!因为你的数据要求太麻烦
CREATE PROCEDURE dt_demo
( @tenday_No char(8))
@area char(4))

AS
declare @total_fee decimal(10,2)
declare @delay decimal(10,2)
declare @sumtotal decimal(10,2)
declare @t0 char(3)

select @t0=left(t0,3),@total_fee=sum(total),@delay=sum(delay_fee) from table1
where t0 like @area
select @sumtotal=sum(total) from table2 where t0 like @area

insert into table3(t0,fee_total,delay_total,add_new)
values(@t0,@total_fee,@delay,@sumtotal)
 
不如使用存储过程来做!因为你的数据要求太麻烦
CREATE PROCEDURE dt_demo
( @tenday_No char(8))
@area char(4))

AS
declare @total_fee decimal(10,2)
declare @delay decimal(10,2)
declare @sumtotal decimal(10,2)
declare @t0 char(3)

select @t0=left(t0,3),@total_fee=sum(total),@delay=sum(delay_fee) from table1
where t0 like @area
select @sumtotal=sum(total) from table2 where t0 like @area

insert into table3(t0,fee_total,delay_total,add_new)
values(@t0,@total_fee,@delay,@sumtotal)
 
多人接受答案了。
 
后退
顶部