从两个表格添加记录到第三个表格:MS SQL Server 2005
我想从两个表格添加记录到第三个表格。它是像下面这样:从两个表格添加记录到第三个表格: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中谁能帮我解决这个问题?
如果我理解你试图做(这是不明确)
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一样的,否则你就需要选择一个规则,如分或最大。否则你会得到两行的表现。
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
也许我在这里错了,但我想你想在这里使用性能表作为其他表的摘要?
E.g. cumulativepnl,cumulativeact是其他表中的plnHec和actHec列的SUM值。
你真的需要这是一个新表,因为汇总数据都可以通过SQL(存储过程或可能是一个视图)从2个原始表中提取。
如果你真的需要复制数据,我会使用类似Josh的查询。
只选择部分,假设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
我*暂停这个问题。但是,现在我会尝试看到你提出的解决方案,并会告诉你最终的结果。 谢谢大家! Dejene – Dejene 2009-04-23 07:06:29
哪些表是两个,这是第三和什么规则? – Quassnoi 2009-04-09 11:08:04