2017-01-05 5 views
1

Ich bin ein Anfänger, wenn es um gespeicherte Prozeduren geht, die Datenbank meines Jobs ist SQL Server 2008 R2 und ich weiß nicht, wie eine einfache Subtraktion zu tun von zwei Werten.Subtraktion in einer gespeicherten Prozedur in SQL Server 2008 R2

Zum Beispiel:

Excel-Tabelle:

enter image description here

In dieser Tabelle wird die dritte Spalte gleich der Subtraktion der ersten Spalte und der zweiten Spalte

auf der Säule einer Tabelle meiner Datenbank sind die erste und die zweite Spalte in einer Spalte:

Tabelle:

enter image description here

So sollte die dritte Spalte die Differenz zwischen der ersten und der zweiten Säule sein, aber ich brauche die Subtraktion der beiden Werte zu berechnen, ich die Werte mit dem Artikel binden kann, dass die haben selbe Nummer.

Wie kann ich dies in einer gespeicherten Prozedur tun? Ich weiß nicht wie ich das machen soll, mache eine While, deklariere Variablen, all das.

Jede Hilfe wird wirklich dankbar sein, Danke.

Antwort

4
Select Articulo 
     ,Col1  = sum(case when Cantidad>0 then Cantidad else 0 end) 
     ,Col2  = sum(case when Cantidad<0 then Cantidad else 0 end)*-1 
     ,Col3  = sum(Cantidad)*-1 
From YourTable 
Group By Articulo 

Returns

Articulo Col1 Col2 Col3 
1003  64000 338464 274464 
1004  43200 271921 228721 
3002  8411 11082 2671 
3007  57600 57238 -362 
+2

@ramiroarizpe keine Variablen benötigt und diese in einer Ansicht getan werden könnte, da es keine Variablen sind die Begrenzung der Daten . Diese Methode wird als bedingte Aggregation bezeichnet. – xQbert

+0

@JohnCappelletti Vielen Dank! Es funktioniert perfekt für mich, ich bin wirklich dankbar! Grüße! –

+0

@RamiroArizpe Glücklich es geholfen –

2

Sie benötigen eine vollständige Selbst verwenden

beitreten
Select p.canditad Positive, -n.canditad Negative, 
    p.canditad+n.canditad Difference 
From table p   -- <-- p for positive values 
    full join table n -- <-- n for negative values 
     on n.articulo = p.articulo 
      and p.canditad > 0 
      and n.canditad < 0 
Verwandte Themen