T-SQL(SQL Server):提取唯一的数据集/数据组
使用T-SQL,我将如何使用SQL从表中提取唯一集。下面是一个示例表:T-SQL(SQL Server):提取唯一的数据集/数据组,sql,sql-server,Sql,Sql Server,使用T-SQL,我将如何使用SQL从表中提取唯一集。下面是一个示例表: ID Value 1 A 1 B 1 C 2 A 2 B 2 C 3 D 3 E 4 D 4 E 5 X 5 Y 5 Z 6 Q 7 Q 8 Q 9 Q 10 A 在这种情况下,所需结果集将有五个唯一集,如下所示: A B C D E X Y Z Q A 这是我必须转换的传入数据的代表。传入的数据有数百个这样的重复集。识别这些集合具有重大价值
ID Value
1 A
1 B
1 C
2 A
2 B
2 C
3 D
3 E
4 D
4 E
5 X
5 Y
5 Z
6 Q
7 Q
8 Q
9 Q
10 A
在这种情况下,所需结果集将有五个唯一集,如下所示:
A
B
C
D
E
X
Y
Z
Q
A
这是我必须转换的传入数据的代表。传入的数据有数百个这样的重复集。识别这些集合具有重大价值;把它们放在一张单独的桌子上;给他们分配一个SetID;然后基于SetID连接将核心数据关联到相关集合;等等。如果您的DBMS有一个组连接/listag功能,那么它很简单
select distinct group_concat(value order by value)
from tab
group by id
如果没有xml路径,可以使用xml路径。 比如说
drop table t
go
create table t(ID int ,Value varchar(1));
go
insert into t values
(1 , 'A'),
(1 , 'B'),
(1 , 'C'),
(2 , 'A'),
(2 , 'B'),
(2 , 'C'),
(3 , 'D'),
(3 , 'E'),
(4 , 'D'),
(4 , 'E'),
(5 , 'X'),
(5 , 'Y'),
(5 , 'Z'),
(6 , 'Q'),
(7 , 'Q'),
(8 , 'Q'),
(9 , 'Q'),
(10, 'A');
获取一行集合
select distinct
maskdetail = STUFF((
SELECT ',' + t1.value
FROM t t1
WHERE t1.id = t.id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
from t
maskdetail
------------------------------
A
A,B,C
D,E
Q
X,Y,Z
(5 row(s) affected)
获取一列集合
select t.value
from t
join
(
select min(id) minid,maskdetail
from
(
select distinct t.id,
maskdetail = STUFF((
SELECT ',' + t1.value
FROM t t1
WHERE t1.id = t.id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
from t
) s
group by maskdetail
) x
on x.minid = t.id
value
-----
A
A
B
C
D
E
Q
X
Y
Z
(10 row(s) affected)
用您正在使用的数据库标记您的问题。如果你有,比如说,“10A”,这些集合会是什么样子?我应该注意到我使用的是T-SQL,它没有这样的函数。回答得很好。很抱歉我的遗漏。@digest806:好吧,在您必须使用XML plus内容之前,SQLServer 2017中有一个字符串\u AGG:-),例如,既然您已经提到MSSQL 2017,那么不妨通过字符串\u AGG;)演示如何执行此操作。)