【问题标题】:Setting occurrence number in Sqlserver在 Sql Server 中设置出现次数
【发布时间】:2017-06-20 09:05:09
【问题描述】:

任何人都可以检查我的 sql 查询,当使用 select 语句时,occurrence_number 列显示正确的值。

select t.[Employee Number], t.Document_Type, t.Document_Name,
 row_number() over (partition by document_type
                          order by right(document_name, 6)
                         ) as occurrence_number
from BluePrismProcesses.dbo.PID0147_DM t

工作

当我使用更新语句时,出现次数搞砸了。

update BluePrismProcesses.dbo.PID0147_DM
set Occurrence = R.occurrence_number
from (select t.[Employee Number], t.Document_Type, t.Document_Name,
 row_number() over (partition by document_type
                          order by right(document_name, 6)
                         ) as occurrence_number
from BluePrismProcesses.dbo.PID0147_DM t) R
where BluePrismProcesses.dbo.PID0147_DM.Document_Name = r.Document_Name 

不工作

【问题讨论】:

  • 两张图片相同
  • 我刚刚更新了截图。
  • 同样尝试使用替换更新语句来选择语句“select BluePrismProcesses.dbo.PID0147_DM.*, r.Occurrence from (select t.[Employee Number], t.Document_Type, t.Document_Name, row_number( ) over (partition by document_type order by right(document_name, 6) ) 作为从 BluePrismProcesses.dbo.PID0147_DM t) R where BluePrismProcesses.dbo.PID0147_DM.Document_Name = r.Document_Name "
  • 你需要一些独特的东西才能加入。记录 6 和 7 是相同的,所以你不会知道它会得到哪个行号。我不是游标的忠实粉丝,但在这种情况下你需要一个。

标签: sql sql-server find-occurrences


【解决方案1】:

问题是您有一个重复的行具有相同的document_name,因此where 子句无法按照您的预期工作。

您可以使用common table expression 解决此问题,并像这样直接更新该 cte:

;with cte as (
  select 
      t.[Employee Number]
    , t.Document_Type
    , t.Document_Name
    , t.occurrence
    , occurrence_number = row_number() over (
        partition by document_type 
        order by right(document_name, 6)
      )
   from BluePrismProcesses.dbo.PID0147_DM t
)

update cte
  set occurrence =  occurrence_number
where (occurrence <> occurrence_number or occurrence is null);

rextester 演示:http://rextester.com/ZVO11388

返回:

+-----------------+-----------+---------------+---------------+------------+
| Employee Number | Doc_Count | Document_Type | Document_Name | Occurrence |
+-----------------+-----------+---------------+---------------+------------+
|          406453 |         2 | offer         |        092735 |          1 |
|          406453 |         2 | offer         |        092735 |          2 |
|          406453 |         2 | offer         |        092848 |          3 |
|          406453 |         2 | offer         |        092848 |          4 |
|          406453 |         2 | offer         |        092848 |          5 |
+-----------------+-----------+---------------+---------------+------------+

【讨论】:

  • 我尝试使用您所做的查询,没有进行任何更改。
  • @yope 是 occurrence 当前是 null ?
  • @yope 查看更新where (occurrence &lt;&gt; occurrence_number or occurrence is null);
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2017-09-29
  • 2016-09-03
  • 2023-04-05
  • 1970-01-01
  • 2021-01-19
  • 2011-01-11
相关资源
最近更新 更多