DECLARE @Таблица table(
[Код ТТ] varchar(8),
[Код продукции] varchar(8),
[Дата] date,
[Отгрузки шт] integer,
[Цена] decimal(8,0)
)
;
INSERT INTO
@Таблица
VALUES
('Код ТТ1','SKU1', '01.01.2014', 1, 100),
('Код ТТ1','SKU1', '02.01.2014', 2, 100),
('Код ТТ1','SKU1', '03.01.2014', 1, 90),
('Код ТТ1','SKU1', '04.01.2014', 1, 100),
('Код ТТ1','SKU1', '05.01.2014', 1, 100),
('Код ТТ1','SKU1', '08.01.2014', 1, 100),
('Код ТТ1','SKU2', '01.01.2014', 1, 100),
('Код ТТ1','SKU2', '02.01.2014', 2, 100),
('Код ТТ1','SKU2', '03.01.2014', 1, 90),
('Код ТТ1','SKU2', '04.01.2014', 1, 80),
('Код ТТ1','SKU2', '05.01.2014', 1, 90),
('Код ТТ2','SKU1', '01.01.2014', 1, 100),
('Код ТТ2','SKU1', '02.01.2014', 2, 100),
('Код ТТ2','SKU1', '03.02.2014', 1, 90),
('Код ТТ2','SKU1', '04.02.2014', 1, 80),
('Код ТТ2','SKU1', '05.02.2014', 1, 90),
('Код ТТ2','SKU1', '08.03.2014', 1, 100);
Declare @ДельтаПредел decimal(5,2) = 0.07;
WITH Т AS (
SELECT
[Код ТТ],
[Код продукции],
[Дата],
[Отгрузки шт],
[Цена],
ROW_NUMBER()over(Partition by [Код ТТ], [Код продукции] order by Convert(datetime,[Дата],104)) AS [ID]
FROM
@Таблица
)
,
cte AS (
SELECT
*,
т.[Цена] AS [Цена пред],
0 AS [Маркировка по пред цене],
[Цена пред которая используется в расчете]=cast(null as decimal(8,0))
FROM
Т т
WHERE
id=1
UNION ALL
SELECT
т.*,
т.[Цена],
CASE
WHEN cte.[Цена пред] IS NOT NULL AND cte.[Цена пред] <> 0 THEN
CASE
WHEN ((т.[Цена] / cte.[Цена пред])-1) <= -@ДельтаПредел THEN
1
ELSE
CASE
WHEN ((т.[Цена] / cte.[Цена пред])-1) <= @ДельтаПредел AND cte.[Маркировка по пред цене] =1 THEN
1
ELSE
0
END
END
END,
cte.[Цена пред]
FROM
Т т
inner join
cte
ON
т.id=cte.id+1
AND
т.[Код ТТ]=cte.[Код ТТ]
AND
т.[Код продукции]=cte.[Код продукции]
)
SELECT
[Код ТТ],
[Код продукции],
[Дата],
[Отгрузки шт],
[Цена],
[ID],
[Маркировка по пред цене],
[Цена пред которая используется в расчете] AS [Цена пред]
FROM
cte c
ORDER BY
[Код ТТ],
[Код продукции],
[ID]
OPTION (MAXRECURSION 0)
|