Sql server SQL Server行数
我希望根据以下示例实现行编号:Sql server SQL Server行数,sql-server,tsql,Sql Server,Tsql,我希望根据以下示例实现行编号: StartOfWeek Total RowNumber ----------------------------- 1/17/2016 8 1 1/24/2016 8 1 1/31/2016 10 2 2/7/2016 10 2 2/14/2016 14 3 2/21/2016 10 4 2/28/2016 10 4 我怎样才能做到这一点?我尝试了密集排列
StartOfWeek Total RowNumber
-----------------------------
1/17/2016 8 1
1/24/2016 8 1
1/31/2016 10 2
2/7/2016 10 2
2/14/2016 14 3
2/21/2016 10 4
2/28/2016 10 4
我怎样才能做到这一点?我尝试了密集排列,但似乎无法获得预期的行数
谢谢 您可以为此使用CTE和自连接
CREATE TABLE test (
StartOfWeek DATETIME,
Total INT
)
INSERT INTO test
VALUES ('1/17/2016',8),
('1/24/2016',8),
('1/31/2016',10),
('2/7/2016',10),
('2/14/2016',14),
('2/21/2016',10),
('2/28/2016',10)
;WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (ORDER BY StartOfWeek) Rn
FROM test
)
SELECT c1.StartOfWeek,
c1.Total,
-- incremement by 1 if Total value changes
SUM(CASE WHEN c1.Total= c2.Total THEN 0
ELSE 1 END) OVER (ORDER BY c1.Rn) AS RowNumber
FROM cte c1
LEFT JOIN cte c2 ON c1.Rn = c2.Rn + 1
Result
StartOfWeek Total RowNumber
----------------------- ----------- -----------
2016-01-17 00:00:00.000 8 1
2016-01-24 00:00:00.000 8 1
2016-01-31 00:00:00.000 10 2
2016-02-07 00:00:00.000 10 2
2016-02-14 00:00:00.000 14 3
2016-02-21 00:00:00.000 10 4
2016-02-28 00:00:00.000 10 4
请编辑您的问题以显示您已尝试的内容。此外,还不完全清楚您想要实现什么。详细阐述@mituw16的评论,不清楚计算行数时使用了什么逻辑。一个天真的猜测可能是,按StartOfWeek排序,总更改值、增量行数的时间。请编辑您的问题以包含此信息。行数指的是什么?稠密级别应该正好做到这一点。你能发布你已经尝试过的东西吗?我没有测试这个,但它似乎会从开始zero@LaurenceSurat这个CTE是相当过分的,你应该能够做到这一点与密集_排名超过订单Total@iamdave密级不会这么做的。。。他希望它按日期排序,并且只有在总数发生变化时才更改行号。请注意,行号2和行号4的合计值均为10