【发布时间】:2018-10-17 04:27:58
【问题描述】:
假设我有一个包含两列(例如季度和年份)的表,我想根据这两列的值创建第三列。有没有办法在没有或创建标识列的情况下使用 while 循环迭代表?
举个例子,假设我有这些行:
Quarter Year Datetimes
---------- ------ --------------
1 2018 null
2 2018 null
3 2018 null
我想更新第 3 列并使它:
Quarter Year Datetimes
---------- ------ --------------
1 2018 2018-03-31 00:00:00.000
2 2018 2018-06-30 00:00:00.000
3 2018 2018-09-30 00:00:00.000
我知道如何进行转换,公式是这样的:
DATEADD(YEAR, @theYear - 1900, DATEADD(QQ, @TheQuarter, -1)).
问题是我想更新表格,这意味着我想添加新信息,而不仅仅是显示第三列的输出。
【问题讨论】:
-
为什么要第三列? (当数据已经存在时,在两个已经存在的列中。)顺便说一句,SQL Server 有计算列...
-
为什么要迭代?你想执行什么样的计算? SQL Server 有许多排名函数,如 ROW_NUMBER()、RANK、DENSE_RANK、NTILE。您也可以使用
OVER子句计算运行总和、平均值等,例如SUM(someValue) OVER (Partition by YEAR,Month)将返回每年和每月的每月总计 -
如果你想要一个每月的总计,你可以写例如
SUM(someValue) OVER (Partition by YEAR,Month ORDER BY Year,Month,Day ROWS UNBOUNDED PRECEDING) -
如果你想计算一年和一个月的结束日期,你可以写
select eomonth(datefromparts(YearColumn,MonthColumn,1))。你不需要循环。你想做什么?
标签: sql sql-server loops while-loop