Добавьте запись / записи из двух таблиц в третью таблицу: MS SQL Server 2005 - PullRequest
0 голосов
/ 09 апреля 2009

Я хочу добавить запись / с из двух таблиц в третью таблицу. Это что-то вроде следующего:

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. Кто-нибудь может мне помочь в решении этой проблемы?

Ответы [ 4 ]

1 голос
/ 09 апреля 2009

Если я понимаю, что вы пытаетесь сделать (что не ясно)

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 одинаков для всех имен задач, в противном случае вам нужно будет выбрать правило, такое как min или max. В противном случае вы получите два ряда производительности.

0 голосов
/ 09 апреля 2009

Выберите только часть, при условии, что поля 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 голосов
/ 09 апреля 2009

Может быть, я здесь не прав, но, думаю, вы хотите использовать таблицу производительности здесь как сводку других таблиц?

например. cumulativepnl, cumulativeact - это значения SUM столбцов plnHec и actHec в других таблицах.

Вам действительно нужно, чтобы это была новая таблица, поскольку сводные данные могут быть извлечены из 2 исходных таблиц с помощью SQL (хранимая процедура или, возможно, представление).

Если вам действительно нужно скопировать данные, я бы использовал что-то вроде запроса Джоша.

0 голосов
/ 09 апреля 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...