2009-04-09 78 views
0

我想从两个表格添加记录到第三个表格。它是像下面这样:从两个表格添加记录到第三个表格:MS SQL Server 2005

table1: pln

taskName plnHec  pinDate(mm/dd/yyyy) 
xx   10   3/1/2008 
yy   20   4/1/2008 
zz   10   3/1/2008 
zz   10   4/1/2008 
xx   10   4/1/2008 

table2 : actual

taskName   actHec   acDate 
xx     9    4/1/2008 
yy     20    4/1/2008 
ww     10    4/1/2008 

table3 : performance

taskName  pdate  plnHec  actHec  cumulativepln cumulativeact 
xx    4/1/2008  10   9   20    9 
yy    4/1/2008  20  20   20    20 
ww    4/1/2008  0   10   0    10 

我使用MS SQL Server 2005中谁能帮我解决这个问题?

+0

哪些表是两个,这是第三和什么规则? – Quassnoi 2009-04-09 11:08:04

回答

1

如果我理解你试图做(这是不明确)

insert into performance (taskname,pdate,plnhec,acthec,cumaltivepin,cumaltiveact) 

select actual.taskname,max(pindate),acthec,plnhec, sum(plnhec),sm(acthec) 
from actual 
left join pl on actual.taskname=pln.taskname 
group by taskname,acthec 

这是假定acthec是所有tasknames一样的,否则你就需要选择一个规则,如分或最大。否则你会得到两行的表现。

0
INSERT 
INTO performance 
SELECT taskname, acDate, 
     (
     SELECT TOP 1 plnHeс 
     FROM pln pi 
     WHERE pi.taskName = ao.taskName 
       AND pi.pinDate = ao.acDate 
     ), 
     actHec. SUM(plnHec), actHec 
FROM actual ao 
JOIN pln po 
ON  po.taskName = ao.taskName 
GROUP BY 
     ao.taskName 
0

也许我在这里错了,但我想你想在这里使用性能表作为其他表的摘要?

E.g. cumulativepnl,cumulativeact是其他表中的plnHec和actHec列的SUM值。

你真的需要这是一个新表,因为汇总数据都可以通过SQL(存储过程或可能是一个视图)从2个原始表中提取。

如果你真的需要复制数据,我会使用类似Josh的查询。

0

只选择部分,假设PDATE = MAX(pinDate)和PLN/actHec字段需要是最新的价值观和一些行为行可丢失:

select 
    p.taskName, 
    max(p.pinDate) as pdate, 
    (select top 1 plnHec from pln where taskName=p.taskName order by pinDate desc) as plnHec, 
    isnull((select top 1 actHec from actual where taskName=p.taskName order by acDate desc),0) as plnHec, 
    sum(isnull(a.actHec,0)) as cumulativeact, 
    sum(p.plnHec) as cumulativepln 
from 
    pln p left join actual a on a.taskName=p.taskName 
group by 
    p.taskName 
+0

我被迫暂停这个问题。但是,现在我会尝试看到你提出的解决方案,并会告诉你最终的结果。 谢谢大家! Dejene – Dejene 2009-04-23 07:06:29

相关问题