如何在没有游标的情况下在 SQL 中创建常量值
how to make constant value in MSSQL without cursor
我有一个 table,我将在 MSSQL 中无游标循环。
Unit Speed C Count x y
A | 200 | 200 | 3 | 3 | 0
A | 230 | 230 | 4 | 7 | 0
A | 240 | 240 | 3 | 10 | 0
A | 250 | 255 | 2 | >=12 | 5
A | 260 | 255 | 2 | 2 | 0
A | 270 | 255 | 2 | 4 | 0
A | 280 | 255 | 3 | 7 | 0
A | 290 | 255 | 4 | 11 | 0
A | 300 | 260 | 2 | >=12 | 5
A | 310 | 260 | 2 | 2 | 0
A | 320 | 260 | 2 | 4 | 0
A | 340 | 260 | 2 | 6 | 0
如何使 C 值在汇总 X 值后保持不变(第一个记录的速度 + 5,下一个值的 C + 5)等于或与 12?
相同
我想在没有游标的情况下循环记录(因为如果我使用游标,数据库会死锁)。
在常见 table 表达式和一些 window 函数的帮助下,我想出了以下解决方案。请注意,您需要一些列来对 table.
进行排序
With cte AS
(
SELECT RowOrder
,cCount
,SUM(cCount) OVER(order by RowOrder) As SumcCount
FROM Tbl
)
SELECT RowOrder
,cCount
,SumcCount % 12 as x
,CASE WHEN SumcCount >= 12
AND RANK() OVER (Partition by SumcCount / 12 ORDER BY RowOrder) = 1 THEN
5
ELSE
0
END As y
FROM CTE
ORDER BY RowOrder
解释:
- Common table expressions 是一种创建临时结果集的方法。
- 使用带有
OVER
子句的 SUM
函数允许对 cCount 进行累加和计算(我不想使用 count,因为它是一个保留字)。
- 使用
RANK
函数为我提供了一种简单的方法来确定 cCount 的累加和是否等于 12 或更多的任何乘法。注意case中还有cCount的累计和为12以上的条件
我有一个 table,我将在 MSSQL 中无游标循环。
Unit Speed C Count x y
A | 200 | 200 | 3 | 3 | 0
A | 230 | 230 | 4 | 7 | 0
A | 240 | 240 | 3 | 10 | 0
A | 250 | 255 | 2 | >=12 | 5
A | 260 | 255 | 2 | 2 | 0
A | 270 | 255 | 2 | 4 | 0
A | 280 | 255 | 3 | 7 | 0
A | 290 | 255 | 4 | 11 | 0
A | 300 | 260 | 2 | >=12 | 5
A | 310 | 260 | 2 | 2 | 0
A | 320 | 260 | 2 | 4 | 0
A | 340 | 260 | 2 | 6 | 0
如何使 C 值在汇总 X 值后保持不变(第一个记录的速度 + 5,下一个值的 C + 5)等于或与 12?
我想在没有游标的情况下循环记录(因为如果我使用游标,数据库会死锁)。
在常见 table 表达式和一些 window 函数的帮助下,我想出了以下解决方案。请注意,您需要一些列来对 table.
进行排序With cte AS
(
SELECT RowOrder
,cCount
,SUM(cCount) OVER(order by RowOrder) As SumcCount
FROM Tbl
)
SELECT RowOrder
,cCount
,SumcCount % 12 as x
,CASE WHEN SumcCount >= 12
AND RANK() OVER (Partition by SumcCount / 12 ORDER BY RowOrder) = 1 THEN
5
ELSE
0
END As y
FROM CTE
ORDER BY RowOrder
解释:
- Common table expressions 是一种创建临时结果集的方法。
- 使用带有
OVER
子句的SUM
函数允许对 cCount 进行累加和计算(我不想使用 count,因为它是一个保留字)。 - 使用
RANK
函数为我提供了一种简单的方法来确定 cCount 的累加和是否等于 12 或更多的任何乘法。注意case中还有cCount的累计和为12以上的条件