2009-04-09 108 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

相關問題