SELECT DISTINCT用于数据组

tho*_*ulb 5 sql t-sql sql-server-2008 distinct-values

我有以下表格:

ID  Data
1   A
2   A
2   B
3   A
3   B
4   C
5   D 
6   A
6   B
Run Code Online (Sandbox Code Playgroud)

换句话说,我每个ID都有一组数据.您会注意到数据组(A,B)多次出现.我想要一个可以识别不同数据组并对其进行编号的查询,例如:

DataID     Data
101        A
102        A
102        B
103        C
104        D
Run Code Online (Sandbox Code Playgroud)

因此,DataID 102将类似于数据(A,B),DataID 103将类似于数据(C)等.为了能够以这种形式重写我的原始表:

ID   DataID
1    101
2    102
3    102
4    103
5    104
6    102
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?


PS.用于生成第一个表的代码:

CREATE TABLE #t1 (id INT, data VARCHAR(10))
INSERT INTO #t1
SELECT 1, 'A'
UNION ALL SELECT 2, 'A'
UNION ALL SELECT 2, 'B'
UNION ALL SELECT 3, 'A'
UNION ALL SELECT 3, 'B'
UNION ALL SELECT 4, 'C'
UNION ALL SELECT 5, 'D'
UNION ALL SELECT 6, 'A'
UNION ALL SELECT 6, 'B'
Run Code Online (Sandbox Code Playgroud)

luc*_*uke 3

在我看来,您必须创建一个连接数据的自定义聚合(出于性能原因,建议使用字符串 CLR 方法)。然后,我将按 ID 进行分组并选择与分组不同的选项,添加 row_number() 函数或添加您选择的 dendense_rank() 。无论如何,它应该看起来像这样

with groupings as (
select concat(data) groups
from Table1
group by ID
)
select groups, rownumber() over () from groupings
Run Code Online (Sandbox Code Playgroud)