Je veux créer une table ou une vue dans SSMS qui devrait avoir une colonne appelée qoh . Dans cette colonne doit être calculée la somme des valeurs de la colonne rel_qty . c'est à dire.
existe-t-il des possibilités pour ce faire?
Voici ma requête. mais cette requête ne satisfait que les première et deuxième lignes pas plus que cela,
SELECT a.id, a.tot_qty, a.rel_qty,
(a.tot_qty -
COALESCE (a.rel_qty +
(SELECT b.rel_qty
FROM dbo.foo AS b
WHERE (b.id = a.id - 1)),
a.rel_qty)
) AS qoh
FROM dbo.foo AS a
ORDER BY a.id
Et si mon identifiant saute une valeur, cette requête n'a pas réussi à faire le calcul. Comment puis-je réparer cela?
voici une capture d'écran de mon résultat
Il semble que vous ayez besoin d'un total cumulé.
Si tot_qty
est le même dans toutes les lignes, vous pouvez utiliser
SELECT id,
tot_qty,
rel_qty,
tot_qty - SUM(rel_qty) OVER (ORDER BY id ROWS UNBOUNDED PRECEDING) AS qoh
FROM dbo.foo
ORDER BY id;
ROWS UNBOUNDED PRECEDING
est la version abrégée de ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
.
Cette option d'encadrement de fenêtre signifie que pour chaque ligne, le SUM
s'inclura lui-même et tous ses prédécesseurs comme ordonné par id
.
L'option ROWS
est potentiellement importante pour l'efficacité, comme décrit dans Meilleures approches pour l'exécution des totaux - mise à jour pour SQL Server 2012