2016-07-27 2 views
0

enter image description here У меня есть таблица с нижерасположенной структурой. [! [Введите описание изображения здесь] [2]] [2]
Я хочу рассчитать еще одно название столбца, которое имеет «Разницу». Разница должна быть рассчитана, если значения guid одинаковы и заполняют разницу на обеих строках.получить разницу между двумя строками и заполнить значение разности

После столбца Difference моя таблица должна выглядеть, как показано ниже enter image description here

Давать подробнее

Моя таблица выглядит, как показано ниже

GUID         Date  Quantity 
0001639C-8047-45FD-8FB0-D24B906D25D0 7/21/2016 30 
0001639C-8047-45FD-8FB0-D24B906D25D0 7/15/2016 20 
00088951-A2F6-4405-9195-4E830912D56D 7/22/2016 40 
00088951-A2F6-4405-9195-4E830912D56D 7/12/2016 20 
00060D8A-F711-42BD-824F-6F9F92A02E6E 7/23/2016 2 
00074492-6068-48A6-8F99-F70D7328B166 7/19/2016 15 
0007E203-4BD9-4937-BFCB-6A3EBCA33448 7/15/2016 2 

После расчета разности колонки она должна выглядеть, как показано ниже

GUID    Date         Quantity Difference 
0001639C-8047-45FD-8FB0-D24B906D25D0 7/21/2016  30    10 
0001639C-8047-45FD-8FB0-D24B906D25D0 7/15/2016  20    10 
00088951-A2F6-4405-9195-4E830912D56D 7/22/2016  40    20 
00088951-A2F6-4405-9195-4E830912D56D 7/12/2016  20    20 
00060D8A-F711-42BD-824F-6F9F92A02E6E 7/23/2016   2     0 
00074492-6068-48A6-8F99-F70D7328B166 7/19/2016  15     0 
0007E203-4BD9-4937-BFCB-6A3EBCA33448 7/15/2016  2      0 

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

+0

добавьте разницу столбца в выходной, если справ будет проверяться только с следующей строки равенства? – TheGameiswar

+0

arent оба изображения одинаковые? и использовать текстовые данные. Мы не можем копировать/вставлять фотографии. –

+0

Добавил изображение столбца Разница, а также предоставил более подробную информацию. Сообщите мне, хорошо ли это. –

ответ

0
DECLARE @Table Table (GUID varchar(50), Date Date, Quantity Decimal(9,2)) 
Insert Into @Table (GUID,Date,Quantity) Values 
('0001639C-8047-45FD-8FB0-D24B906D25D0','2016-07-21',30), 
('0001639C-8047-45FD-8FB0-D24B906D25D0','2016-07-15',20), 
('00088951-A2F6-4405-9195-4E830912D56D','2016-07-22',40), 
('00088951-A2F6-4405-9195-4E830912D56D','2016-07-12',20), 
('00060D8A-F711-42BD-824F-6F9F92A02E6E','2016-07-23',2), 
('00074492-6068-48A6-8F99-F70D7328B166','2016-07-19',15), 
('0007E203-4BD9-4937-BFCB-6A3EBCA33448','2016-07-15',2) 

;with cteBase as (
    Select * 
     ,Difference=Quantity - Lag(Quantity) over (Partition By GUID Order By Date) 
     ,PctChange =(100*(Lag(Quantity) over (Partition By GUID Order By Date)))/Quantity 
    From @Table 
) 
Select GUID,Date,Quantity 
     ,Difference = sum(isnull(Difference,0)) over (Partition By GUID Order By Date Desc) 
     ,PctChange = sum(isnull(PctChange ,0)) over (Partition By GUID Order By Date Desc) 
From cteBase 
Order by GUID,Date Desc 

Возвращает

GUID         Date  Quantity Difference PctChange 
0001639C-8047-45FD-8FB0-D24B906D25D0 2016-07-21 30.00  10.00   66.666666666666 
0001639C-8047-45FD-8FB0-D24B906D25D0 2016-07-15 20.00  10.00   66.666666666666 
00060D8A-F711-42BD-824F-6F9F92A02E6E 2016-07-23 2.00  0.00   0.000000000000 
00074492-6068-48A6-8F99-F70D7328B166 2016-07-19 15.00  0.00   0.000000000000 
0007E203-4BD9-4937-BFCB-6A3EBCA33448 2016-07-15 2.00  0.00   0.000000000000 
00088951-A2F6-4405-9195-4E830912D56D 2016-07-22 40.00  20.00   50.000000000000 
00088951-A2F6-4405-9195-4E830912D56D 2016-07-12 20.00  20.00   50.000000000000 
0
DECLARE @Table Table (GUID varchar(50), Date Date, Quantity Decimal(9,2)) 
Insert Into @Table (GUID,Date,Quantity) Values 
('0001639C-8047-45FD-8FB0-D24B906D25D0','2016-07-21',30), 
('0001639C-8047-45FD-8FB0-D24B906D25D0','2016-07-15',20), 
('00088951-A2F6-4405-9195-4E830912D56D','2016-07-22',40), 
('00088951-A2F6-4405-9195-4E830912D56D','2016-07-12',20), 
('00060D8A-F711-42BD-824F-6F9F92A02E6E','2016-07-23',2), 
('00074492-6068-48A6-8F99-F70D7328B166','2016-07-19',15), 
('0007E203-4BD9-4937-BFCB-6A3EBCA33448','2016-07-15',2) 

;with cteBase as (
    Select * 
     ,Difference=Quantity - Lag(Quantity) over (Partition By GUID Order By Date) 
    From @Table 
) 
Select GUID,Date,Quantity 
     ,Difference = sum(isnull(Difference,0)) over (Partition By GUID Order By Date Desc) 
From cteBase 
Order by GUID,Date Desc 

Возвращает

GUID         Date  Quantity Difference 
0001639C-8047-45FD-8FB0-D24B906D25D0 2016-07-21 30.00  10.00 
0001639C-8047-45FD-8FB0-D24B906D25D0 2016-07-15 20.00  10.00 
00060D8A-F711-42BD-824F-6F9F92A02E6E 2016-07-23 2.00  0.00 
00074492-6068-48A6-8F99-F70D7328B166 2016-07-19 15.00  0.00 
0007E203-4BD9-4937-BFCB-6A3EBCA33448 2016-07-15 2.00  0.00 
00088951-A2F6-4405-9195-4E830912D56D 2016-07-22 40.00  20.00 
00088951-A2F6-4405-9195-4E830912D56D 2016-07-12 20.00  20.00 
+0

Спасибо, Джон работает для меня –

+0

@saikiranVoruganti Счастлив помочь .... голосуйте, если вы склонны. –

+0

Хотите добавить один столбец, –

Смежные вопросы