sql >> Databáze >  >> RDS >> Sqlserver

Automatický výpočet sloupců v tabulce SQL na základě dat předchozího řádku

Předpoklad

1. Struktura vaší tabulky je jako

Date | In Stock | Out Stock

2. Vložíte Nové sloupce před výpočtem balance .

3. Datum je Primary Column (Unikátní + ne NULL )

Vezmeme-li výše uvedené předpoklady:

Vytvořili jste SP pokud chcete používat v C#

1. Vytvořte dočasnou tabulku a přiřazené Row Number 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.Nyní budete používat výše uvedenou temp table získat Zůstatek

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);

Zde je SQL Fiddle kde si to můžete ověřit.



  1. problém s výkonem:rozdíl mezi vybranými s.* a vybranými *

  2. Jak přímo spustit SQL dotaz v C#?

  3. DevOps:DBA nebo vývojář – Jak dosáhnout správné rovnováhy

  4. DB schéma řízení přístupu založeného na rolích