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