如果我用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
我以前从未在sql中编写过循环,我需要的是从循环中的当前项中获取值并使用它。
在上面的代码中我使用 SELECT
得到 someValue
.
我需要做些什么吗 select
像这样的所有领域,我需要或有一些更简单的方法,如foreach循环和获取电流 item.someValue
?
更新
根据评论,也许我不需要循环。
这是示例表
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` 这就是我认为循环是自然解决方案的地方。
其他列基本上是add
orderSecondTime = 24h + orderTime `orderThirdTime = orderTime to orderSecondTime` 类似的。
更新#2:
示例规则:
如果订购时间在08:00到10:00之间:
ordersecondtime=订单时间+60分钟
orderthirdtime=ordersecondtime(以上计算)+60分钟
否则使用不同的计算方法,比如加30分钟
我所拥有的
![](https://i.stack.imgur.com/VAOdu.png)
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
我想计算的是
![](https://i.stack.imgur.com/Q6gu1.png)
1条答案
按热度按时间92vpleto1#
你不是刚喝了几杯吗
CASE
表达?旁注:SQLServer2008已经完全不受支持一年多了。您应该尽快查看升级路径(如果还没有)。