【问题标题】:SQL Create Row Number, skip certain row numbersSQL 创建行号,跳过某些行号
【发布时间】:2021-06-28 17:48:40
【问题描述】:

我正在尝试在 SQL 中创建行号,但不想使用某些数字。

示例说明:

 Bob, 100
 Matt, 120
 Dan, 150
 Bill, 156
 Tim, 175

通常在 SQL 中......如果我要使用 Row_Number() 函数......它会计数 - 1、2、3、4、5。

我想跳过某些数字,以便计数 - 1、2、5、6、7

下面是我的代码

SELECT 
    CASE 
       WHEN clean_client_nm = 'Total Opportunities' 
          THEN 0 
          ELSE ROW_NUMBER() OVER (ORDER BY clean_ft_ee DESC) 
    END AS row_id,
    prod,
    client_nm,
    clean_ft_ee,
    ISNULL(Med, ''),
    ISNULL(Stop, ''),
    ISNULL(Den, ''),
    ISNULL(VIS, ''),
    ISNULL(Life, ''),
    ISNULL(STD, ''),
    ISNULL(LTD, ''),
    ISNULL(Worksite, ''),
    client_sic
FROM 
    (SELECT * FROM TOTAL
     UNION ALL
     SELECT * FROM BASE) AS X
ORDER BY 
    CASE 
       WHEN clean_client_nm = 'Total Opportunities' 
          THEN 0 
          ELSE 1 
    END,
    clean_ft_ee DESC, client_nm 

【问题讨论】:

  • 请解释跳过的逻辑。
  • @GordonLinoff 只是试图优化代码,以便在将其粘贴到 Excel 电子表格中时,我可以简单地打印表格并正确格式化。换言之,无需操作繁重的公式或 vba 代码。
  • 带有 FOR 循环的动态 SQL。当您找到要跳过的值时,只需增加您的迭代器即可。

标签: sql row-number


【解决方案1】:

答案是创建一个临时/变量表并插入用户需要的指定值,然后使用 FirstCursor 逻辑顺序更新所需表中的 row_id 字段。

    declare FirstCursor cursor global for select row_num from @row_num
    open FirstCursor
       while @count > 0
          begin
             fetch FirstCursor into @row_id;
             with top1 as (
             select top 1 lives, row_id
             from @singlecovclient
             where row_id is null order by lives desc)
             update top1 set row_id = @row_id
             set @count = @count - 1
           end
    close FirstCursor
    deallocate FirstCursor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多