将 ID 分配给配对组
Assign Ids to a paired group
我有一个 table,其中包含一些如下所示的资产信息:
| ID | PairID | AssetName | PairAssetName |
|----|---------|-------------|---------------|
| 1 | 3 | Case1 | Case3 |
| 4 | 2 | Case4 | Case2 |
| 3 | 1 | Case3 | Case1 |
| 2 | 4 | Case2 | Case4 |
如您所见,ID 和 PairID 彼此相关,数据相同 table。我需要分配一个允许我以增量方式识别它们的组 ID。看起来像这样的东西:
| ID | PairID | AssetName | PairAssetName| GroupID |
|----|---------|-------------|--------------|---------|
| 1 | 3 | Case1 | Case3 | Group1 |
| 4 | 2 | Case4 | Case2 | Group2 |
| 3 | 1 | Case3 | Case1 | Group1 |
| 2 | 4 | Case2 | Case4 | Group2 |
这将使我能够以更简单的方式识别对,因为我知道有时有些行根本没有对。在 SQL 中有没有办法做到这一点?不用说Group1,但有了这个数字就绰绰有余了。
假设整数足以满足 groupid
,那么一种方法是 dense_rank()
:
select t.*,
dense_rank() over (order by case when id < pairid then id else pairid end,
case when id < pairid then pairid else id end
) as groupid
from t;
我有一个 table,其中包含一些如下所示的资产信息:
| ID | PairID | AssetName | PairAssetName |
|----|---------|-------------|---------------|
| 1 | 3 | Case1 | Case3 |
| 4 | 2 | Case4 | Case2 |
| 3 | 1 | Case3 | Case1 |
| 2 | 4 | Case2 | Case4 |
如您所见,ID 和 PairID 彼此相关,数据相同 table。我需要分配一个允许我以增量方式识别它们的组 ID。看起来像这样的东西:
| ID | PairID | AssetName | PairAssetName| GroupID |
|----|---------|-------------|--------------|---------|
| 1 | 3 | Case1 | Case3 | Group1 |
| 4 | 2 | Case4 | Case2 | Group2 |
| 3 | 1 | Case3 | Case1 | Group1 |
| 2 | 4 | Case2 | Case4 | Group2 |
这将使我能够以更简单的方式识别对,因为我知道有时有些行根本没有对。在 SQL 中有没有办法做到这一点?不用说Group1,但有了这个数字就绰绰有余了。
假设整数足以满足 groupid
,那么一种方法是 dense_rank()
:
select t.*,
dense_rank() over (order by case when id < pairid then id else pairid end,
case when id < pairid then pairid else id end
) as groupid
from t;