Sql server 2008 如何在无光标的MSSQL中设置常量值
我有一个表,我将在MSSQL中不使用光标循环Sql server 2008 如何在无光标的MSSQL中设置常量值,sql-server-2008,cursor,Sql Server 2008,Cursor,我有一个表,我将在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
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
在汇总X值等于或等于12后,如何使C值恒定(速度+5用于第一个记录,C+5用于下一个值)
我想在不使用游标的情况下循环记录(因为如果使用游标,数据库将处于死锁状态)。在公共表表达式和一些窗口函数的帮助下,我提出了以下解决方案。请注意,您需要一些列来对表进行排序
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
解释:
- 是一种创建临时结果集的方法李>
- 在子句中使用
函数可以对Account进行累积求和(我不想使用count,因为它是一个保留字)李>SUM
- 使用该函数,我可以用一种简单的方法来确定Account的累积和是否等于12或更多的任何乘法。请注意,在这种情况下,还有一个条件,即帐户的累计和等于或大于12
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
解释:
- 是一种创建临时结果集的方法李>
- 在子句中使用
函数可以对Account进行累积求和(我不想使用count,因为它是一个保留字)李>SUM
- 使用该函数,我可以用一种简单的方法来确定Account的累积和是否等于12或更多的任何乘法。请注意,在这种情况下,还有一个条件,即帐户的累计和等于或大于12