2016-09-14 3 views
0

Я хочу копировать данные [jumlah siswa] из [data_sekolah] таблицы в [data_baru] таблицы с sum функции (столбец [jumlah siswa] суммированного по столбцам [класс] и [дата])Как обновить таблицу из другой таблицы с помощью функции sum?

Я попробовал этот запрос

update [data_baru] 
set [jumlah siswa]= SUM(DS.[jumlah siswa]) 
from [data_baru] DB 
inner join [data_sekolah] DS on DB.[class] = DS.[class] 
          and month(DB.[Date]) = month(DS.[Date]) 

Я получаю сообщение об ошибке:

An aggregate may not appear in the set list of an UPDATE statement.

Если я не использую функцию sum, я просто не могу взять верхнюю 1 из колонки jumlah siswa по классам и дате data_sekolah таблицы

+1

HTTPS://support.microsoft.com/en-us/kb/90477 – artm

ответ

1

Попробуйте с ниже запрос ..

 update DB 
     set [jumlah siswa]= SUM_jumlah siswa 
     FROM [data_baru] DB 
     INNER JOIN 
     (Select class,month([Date]) Month 
      ,SUM([jumlah siswa]) SUM_jumlah siswa 
      From [data_sekolah] 
      Group by class,month([date])) DS 
     ON DB.[class]=DS.[class] 
      and month(DB.[Date]) =DS.Month) 
1

Используйте следующий запрос:

UPDATE [data_baru] 
SET [jumlah siswa]= (SELECT SUM(DS.[jumlah siswa] 
        FROM [data_sekolah] DS 
        WHERE DB.[class]=DS.[class] 
        AND month(DB.[Date]) = month(DS.[Date]) 
     FROM [data_baru] DB 

https://support.microsoft.com/en-us/kb/90477

1
UPDATE Process_Master 
SET  cnt = a.ct 
FROM Process_Master 
     INNER JOIN (SELECT dbo.Process_Master.Process_Id , 
          sum(1) AS ct 
        FROM dbo.Employee_Process 
          INNER JOIN dbo.Process_Master ON dbo.Employee_Process.Process_Id = dbo.Process_Master.Process_Id 
        GROUP BY dbo.Process_Master.Process_Id 
        ) AS a ON Process_Master.Process_Id = a.Process_Id 
1

Следующий запрос должен сделать трюк!

UPDATE DB 
SET  [jumlah siswa] = DS.Sum_jumlah_siswa 
FROM [data_baru] AS DB 
CROSS APPLY 
    ( SELECT SUM(DS.[jumlah siswa]) AS Sum_jumlah_siswa 
     FROM [data_sekolah] AS DS 
     WHERE DB.[class]=DS.[class] 
      AND month(DB.[Date]) = month(DS.[Date]) 
    ) AS DS 
1

Попробуйте:

UPDATE DB SET [jumlah siswa]= t.tot 
FROM [data_baru] DB 
OUTER APPLY (SELECT SUM(DS.[jumlah siswa]) tot FROM [data_sekolah] DS 
WHERE DB.[class]=DS.[class] AND MONTH(DB.[Date]) = MONTH(DS.[Date]) 
GROUP BY DS.[class], MONTH(DS.[Date])) t 
0

Первая же сумма в группе (соответствие условию)

; with temp as (
        select DB.[class] as class , month(DB.[Date]) as date , 
        SUM(DS.[jumlah siswa]) as sum_jumlahsiswa 
        from [data_sekolah] DS group by DB.[class], month(DB.[Date]) 
     ) 

     update [data_baru] set [jumlah siswa] =sum_jumlahsiswa 
      FROM [data_baru] DB 
      INNER JOIN temp DS ON DB.[class]=DS.[class] and DB.[Date] = month(DS.[Date]) 
Смежные вопросы