Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用分区在SQL中创建唯一的行ID_Sql_Sql Server_Partition - Fatal编程技术网

使用分区在SQL中创建唯一的行ID

使用分区在SQL中创建唯一的行ID,sql,sql-server,partition,Sql,Sql Server,Partition,我希望有人能告诉我我的语法哪里错了,或者让我知道是否有更好的方法来实现我的目标。我已经获取了一个大型数据集,并应用了许多标识字段,以便在以后对数据进行分组。我想对数据应用一个唯一的“队列ID”,我可以使用它在以后对数据进行分组。我认为(分区)类型的结构上的Row_Number()可以工作,但由于某些原因,显然不行。我得到的队列ID对于我指定的字段是不同的,而它们应该是相同的。我的代码如下: 为了进一步指定我正在尝试做的事情,如果我下面选择的字段中的所有项目对于两个不同的数据行都相等,我希望用相同

我希望有人能告诉我我的语法哪里错了,或者让我知道是否有更好的方法来实现我的目标。我已经获取了一个大型数据集,并应用了许多标识字段,以便在以后对数据进行分组。我想对数据应用一个唯一的“队列ID”,我可以使用它在以后对数据进行分组。我认为(分区)类型的结构上的Row_Number()可以工作,但由于某些原因,显然不行。我得到的队列ID对于我指定的字段是不同的,而它们应该是相同的。我的代码如下:

为了进一步指定我正在尝试做的事情,如果我下面选择的字段中的所有项目对于两个不同的数据行都相等,我希望用相同的队列ID进行标记。例如,如果下一行与前两行相同,除了不同的“颁发者”,我希望获得不同的队列ID

下面的数据样本与我的预期队列ID

Asset_Type  Account Issuer  Return_Bucket   Age_Bucket  Type_Bucket Risk_Bucket Cohort ID
Equity  Client 1    Bank A  10-15   3-6 months  Financial   Moderate    1
Equity  Client 1    Bank A  10-15   3-6 months  Financial   Moderate    1
Equity  Client 1    Bank A  10-15   6-12 months Financial   Moderate    2
Equity  Client 1    Bank A  10-15   6-12 months Financial   Moderate    2
Equity  Client 1    Bank A  10-15   6-12 months Financial   High    3
Fixed   Client 1    Bank A  10-15   6-12 months Financial   High    4
Equity  Client 1    Bank A  5-10    3-6 months  Financial   Moderate    5



Select
Row_Number() Over(Partition By [Asset_Type],
[Account],
[Issuer],
[Return_Bucket],
[Age_Bucket],
[Type_Bucket],
[Risk_Bucket]
Order by [Account]) Account AS CohortID
into Test_Table_2
from Test_Table_1

您可以使用秩,而不需要分区:

Select *,
Rank() Over(ORDER By [Asset_Type],
[Account],
[Issuer],
[Return_Bucket],
[Age_Bucket],
[Type_Bucket],
[Risk_Bucket]) AS CohortID
into Test_Table_2
from Test_Table_1

您可以使用秩,而不需要分区:

Select *,
Rank() Over(ORDER By [Asset_Type],
[Account],
[Issuer],
[Return_Bucket],
[Age_Bucket],
[Type_Bucket],
[Risk_Bucket]) AS CohortID
into Test_Table_2
from Test_Table_1

您的示例结果表明,您希望
densite\u rank()
--没有差距:

Select t.*
       dense_rank() Over (order by [Asset_Type], [Account], [Issuer], [Return_Bucket],
                                   [Age_Bucket], [Type_Bucket], [Risk_Bucket]
                         ) as CohortID
into Test_Table_2
from Test_Table_1 t;
分区按
将计数分成不同的组。这意味着每组将重复
1
orderby
只是简单地对它们进行排序


我想你也有其他专栏。表中的重复项通常不是很有用。我建议您将其删除。

您的示例结果表明您希望
稠密的\u rank()
--没有间隙:

Select t.*
       dense_rank() Over (order by [Asset_Type], [Account], [Issuer], [Return_Bucket],
                                   [Age_Bucket], [Type_Bucket], [Risk_Bucket]
                         ) as CohortID
into Test_Table_2
from Test_Table_1 t;
分区按
将计数分成不同的组。这意味着每组将重复
1
orderby
只是简单地对它们进行排序



我想你也有其他专栏。表中的重复项通常不是很有用。我建议您删除它们。

请删除示例数据和预期结果。Sql server?检查
校验和
二进制校验和
我根据语法假设SQL Server。请提供示例数据和预期结果。SQL Server?检查
CHECKSUM
BINARY\u CHECKSUM
我假设SQL Server是基于语法的。它不应该是
densite\u RANK
吗?densite RANK是正确的,但是需要扩展顺序才能工作。是的,如果不需要间隙,则应为稠密等级。是否应改为
稠密等级
?稠密等级是正确的,但是,需要扩展排序才能工作。是的,如果不需要间隙,则应为稠密等级谢谢!这是一个完美的解决方案,它与我在一个更大更笨重的小组中创造的记录数量有关;如何将此字段添加到现有表中?我得到的错误是,窗口函数只能出现在Select或order by子句中。@financedude。您的代码正在使用
选择进入
。它将被添加到您定义的临时表中。如果要修改现有表,则会遇到另一个问题。我想做同样的事情,但现在我正在尝试这样做,以便将“排序的共有”字段永久添加到原始表中,以便稍后在group by子句中使用它。这可能吗?谢谢!这是一个完美的解决方案,它与我在一个更大更笨重的小组中创造的记录数量有关;如何将此字段添加到现有表中?我得到的错误是,窗口函数只能出现在Select或order by子句中。@financedude。您的代码正在使用
选择进入
。它将被添加到您定义的临时表中。如果要修改现有表,则会遇到另一个问题。我想做同样的事情,但现在我正在尝试这样做,以便将“排序的共有”字段永久添加到原始表中,以便稍后在group by子句中使用它。这可能吗?