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

Automatyczne obliczanie kolumn w tabeli sql na podstawie danych z poprzedniego wiersza

Założenie

1. Twoja struktura tabeli jest jak

Date | In Stock | Out Stock

2.Wstawisz nowe kolumny przed obliczeniem balance .

3.Data jest Primary Column (Unikalne + Nie NULL )

Przyjmując powyższe założenia:

Zrobiłeś SP jeśli chcesz używać w C#

1. Utwórz tablicę tymczasową i przypisany Row Number za pomocą Rank()

select 
rank() OVER (ORDER BY [Date]) as [Rank],
t1.[Date],
t1.[in stock],
t1.[out stock]
--,t1.[in stock]-t1.[out stock] balance
into #temp1
from (your table name)
;

2. Teraz będziesz używać powyższej temp table aby uzyskać Saldo

WITH x AS
(
    SELECT 
        [Rank],
        [Date],
        [in stock],
        [out stock],
        bal=([in stock]-[out stock])
    FROM #temp1
    WHERE [Rank] = 1
    UNION ALL
    SELECT 
        y.[Rank],
        y.[Date],
        y.[in stock],
        y.[out stock],
        x.bal+(y.[in stock]-y.[out stock])
    FROM x INNER JOIN #temp1 AS y
    ON y.[Rank] = x.[Rank] + 1
)
SELECT 
    [Date],
    [in stock],
    [out stock],
    Balance = bal
FROM x
ORDER BY Date
OPTION (MAXRECURSION 10000);

Oto SQL Fiddle gdzie możesz zweryfikować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź łączną liczbę minut ignorując nakładanie się (konwertuj odpowiedź opartą na kursorze na CTE)

  2. Konwersja SQL Server wybierz kolumnę i przekonwertuj ją na ciąg

  3. Co to jest operator logiczny w SQL Server — samouczek SQL Server / TSQL część 123

  4. Skrypt SQL do zmiany WSZYSTKICH kluczy obcych, aby dodać ON DELETE CASCADE

  5. Prawidłowa kolejność instalacji programu Visual Studio 2010 z SQL Server 2008 i Office 2007?