Если я напишу l oop в SQL как:
DECLARE @Counter INT = 0
SET @length = (SELECT COUNT(*) FROM table)
WHILE @Counter <= @length
BEGIN
DECLARE @id INT = (SELECT TOP 1 id FROM table WHERE id = @Counter)
DECLARE @someValue int = (SELECT TOP 1 someValue FROM table WHERE id = @id)
END
Я никогда раньше не писал l oop в SQL, и мне нужно взять значения из текущего элемента в l oop и используйте его.
В приведенном выше коде я использую SELECT
, чтобы получить someValue
.
Нужно ли мне делать select
как это для всех полей, которые мне нужны, или там это какой-то более простой способ, например, foreach l oop и получить текущий item.someValue
?
UPDATE
На основе комментариев, возможно, мне не нужен l oop .
Это пример таблицы
create table products
(
tourId int NOT NULL IDENTITY PRIMARY KEY,
title nvarchar(50),
orderTime smalldatetime,
orderSecondTime smalldatetime,
orderThirdTime smalldatetime
);
orderTime
имеет значение, orderSecondTime
и orderThirdTime
- NULL
.
Мне нужно сделать несколько CASE..WHEN
на orderTime
и обновите orderSecondTime
и orderThirdTime
.
Когда я скажу CASE...WHEN
мне нужно на основе даты в orderTime обновить другие столбцы, например:
orderThirdTime
можно зависит от orderSecondTime
, вот где я думал, что циклы являются естественным решением.
Эти другие столбцы в основном добавляют orderSecondTime = 24h + orderTime
orderThirdTime = orderTime to orderSecondTime
и тому подобное.
UPDATE # 2 :
Пример правил:
Если это заказ rTime находится между 08:00 и 10:00:
- orderSecondTime = orderTime + 60 мин.
- orderThirdTime = orderSecondTime (вычислено выше) + 60 мин
- ELSE используйте другой расчет, например, добавить 30 мин.
Что у меня есть
tourId title orderTime orderSecondTime orderThirdTime
-------------------------------------------------------------------
1 prod1 2020-08-02 08:00 null null
2 prod12 2020-08-02 09:00 null null
3 prod13 2020-08-02 10:00 null null
4 prod14 2020-08-02 11:00 null null
What I am trying to calculate
введите описание изображения здесь