У меня есть этот вопрос до Цикл между двумя параметрами случая (диапазон дат и количество строк) | SQL Server 2012 , теперь я думаю о сценарии, что если значение имеет 0,5? или .5? Будет ли это работать, используя ROW_NUMBER()
?
Я пытаюсь сделать эту работу, используя только CASE
метод.
Это мой старый скрипт:
DECLARE @dbApple TABLE
(
FromDate varchar(30) NOT NULL,
ToDate varchar(30) NOT NULL,
Name varchar(30) NOT NULL,
Count float(30) NOT NULL
)
INSERT INTO @dbApple (FromDate, ToDate, Name, Count)
VALUES ('2019-10-05', '2019-10-09', 'APPLE', '2.5');
(SELECT
CONVERT(date, CONVERT(date, DATEADD(D, VAL.NUMBER, FromDate))) AS Date,
DB.Name,
CASE
WHEN CONVERT(date, CONVERT(date, DATEADD(D, VAL.NUMBER, FromDate))) BETWEEN CONVERT(date, CONVERT(date, DATEADD(D, VAL.NUMBER, FromDate))) AND CONVERT(date, CONVERT(date, DATEADD(D, VAL.NUMBER, ToDate)))
THEN
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY Count, FromDate, ToDate ORDER BY Count) <= Count
THEN (COUNT / COUNT)
END
END AS Count
FROM
@dbApple DB
JOIN
MASTER..SPT_VALUES VAL ON VAL.TYPE = 'P'
AND VAL.NUMBER BETWEEN 0 AND DATEDIFF(D, FromDate, ToDate))
Это вывод:
![enter image description here](https://i.stack.imgur.com/oFKd2.png)
Это мой ожидаемый вывод:
![enter image description here](https://i.stack.imgur.com/p0T6f.png)
Есть ли способ, чтобы это сработало? Спасибо.