【问题标题】:How to produce the same Group ID for like records in SQL Server如何为 SQL Server 中的类似记录生成相同的组 ID
【发布时间】:2014-04-09 19:03:10
【问题描述】:

我有一个包含地址和日期的表格,我需要为具有相同地址和日期的每条记录提供一个唯一 ID。这是我需要的样子:

     Address       |  Date    |  Group_id
     --------------------------------------
     12 address      1-1-2014       1
     14 address      1-2-2014       2
     14 address      1-2-2014       2
     14 address      1-2-2014       2
     12 address      1-3-2014       3
     12 address      1-3-2014       3
     13 address      1-4-2014       4
     13 address      1-4-2014       4

问题是 ROW_NUMBER() OVER(Partition by Address, Date) 给出了这个结果:

     Address       |  Date    |  Group_id
     --------------------------------------
     12 address      1-1-2014       1
     14 address      1-2-2014       1
     14 address      1-2-2014       2
     14 address      1-2-2014       3
     12 address      1-3-2014       1
     12 address      1-3-2014       2
     13 address      1-4-2014       1
     13 address      1-4-2014       2

此外,Dense_Rank() 为组 ID 返回全 1

想法?

【问题讨论】:

  • 您可以发布数据的示例预期结果吗?目前尚不清楚您希望 group id 返回什么值。
  • 第一个表就是我想要的。请注意,仅当地址和日期相同时,ID 才是唯一的。

标签: sql-server tsql


【解决方案1】:

您可以使用 Dense_Rank

而不是 Row_Number

试试这个

SELECT Address,Date,Dense_Rank() OVER(Order by Address, Date) 
FROM Table1

【讨论】:

  • 我忘了说我也试过了。组 id 的结果全为 1。我把它放在问题中是为了消除未来的任何混淆。谢谢。
  • @Min,为什么你认为这个查询不符合你的要求?
  • 当我使用 Dense_Rank 并按地址和日期对其进行分区时,结果都是 1,而不是每个类似记录的唯一 ID。
  • @Min 我在答案中看不到PARTITION BY。你为什么用它?
  • 我的错误,我已经有一段时间了,我不假思索地添加了分区。谢谢大家的帮助,效果很好。
【解决方案2】:

试试这个

declare @table table(address varchar(100), datecol datetime)
insert into @table 
select '12 address','1-1-2014' union all
select '14 address','1-2-2014' union all
select '14 address','1-2-2014' union all
select '14 address','1-2-2014' union all
select '12 address','1-3-2014' union all
select '12 address','1-3-2014' union all
select '13 address','1-4-2014' union all
select '13 address','1-4-2014'


SELECT Address,Datecol,Dense_Rank() OVER(Order by Datecol, Address) Group_ID
FROM @table 

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多