2017-01-05 4 views
1

Я новичок, когда дело доходит до хранимых процедур, база данных моей работы - это SQL Server 2008 R2, и я не знаю, как сделать простое вычитание двух значений.Как сделать вычитание в хранимой процедуре в SQL Server 2008 R2

Например:

Excel таблицы:

enter image description here

В этой таблице в третьей колонке равна вычитанием первого столбца и во второй колонке

на колонке таблицы моей базы данных, первая и вторая колонки находятся в одной колонке:

Таблица:

enter image description here

Таким образом, третья колонка должна быть разницей между первым и вторым колонке, но мне нужно, чтобы вычислить вычитание двух значений, можно связать значения с этой статьей, которые имеют такое же количество.

Как это сделать в хранимой процедуре? Я не знаю, как это сделать, делая While, объявляя переменные, все это.

Любая помощь будет очень благодарна, спасибо.

ответ

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 

Возвращает

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

@ramiroarizpe Нет переменных не требуется, и это может быть сделано в целях, так как не являются переменными, ограничивающие данные , Этот метод известен как условная агрегация. – xQbert

+0

@JohnCappelletti Большое спасибо! Он отлично работает для меня, я очень благодарен! С уважением! –

+0

@RamiroArizpe С удовольствием помогли –

2

Вы должны использовать полный автообъединение

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