Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Aktualizacja T-SQL z SUM i Group BY

Jeśli to zapytanie zwróci żądane informacje:

SELECT *, LINE_TOTAL = SUM(l.LINE_TOTAL) OVER 
    (PARTITION BY l.IC_PO_HEADER, l.RELEASE_NUMBER)
  FROM dbo.PO_HEADER AS h
  INNER JOIN dbo.PO_LINE AS l
  ON h.IC_PO_HEADER = l.IC_PO_HEADER 
  AND h.RELEASE_NUMBER = l.RELEASE_NUMBER;

To jest prawdopodobnie zapytanie UPDATE, które chcesz:

;WITH x AS
(
  SELECT h.TOTAL, lt = SUM(l.LINE_TOTAL) OVER 
    (PARTITION BY l.IC_PO_HEADER, l.RELEASE_NUMBER)
  FROM dbo.PO_HEADER AS h
  INNER JOIN dbo.PO_LINE AS l
  ON h.IC_PO_HEADER = l.IC_PO_HEADER 
  AND h.RELEASE_NUMBER = l.RELEASE_NUMBER
)
UPDATE x SET TOTAL = lt;

Muszę się zgodzić z Gordonem, twoje zgrupowanie wydaje się bardzo dziwne. Nie jestem pewien, czy mam rację (dlatego zdecydowanie polecam najpierw uruchomić SELECT).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady konwersji „smalldatetime” na „datetime” w SQL Server (T-SQL)

  2. Skąd SqlCacheDependency wie, kiedy komunikować się z dowolnymi odbiornikami, gdy dane w tabeli ulegną zmianie?

  3. Serwer SQL przy aktualizacji ustaw aktualny znacznik czasu

  4. Usuń skrypt SQL Server 2008

  5. DateTime2 vs DateTime w SQL Server