我现在有一个数据集,每一行都应该表示一个项目的危险代码。有些物品有相同的危险代码多次,因为它代表不同的描述内的货物。
我的目标是将下面的数据集转换为每个不同的gkey,但是在gkey的行中有其各自的和不同的imdg_class值:
目前的数据结果:

因此,在gkey = 4524111的情况下,我希望imdg_class有3, 8。
注意:imdg_class列有以下不同的值列表
1.1B
1.1C
1.1D
1.2C
1.2E
1.2G
1.3C
1.3G
1.4B
1.4C
1.4G
1.4S
1.5D
2.1
2.2
2.3
3
4.1
4.2
4.3
5.1
5.2
6.1
6.2
7
8
9
我很感激任何人能提供的帮助。
编辑:
我的版本如下:
Microsoft SQL Server Management Studio 14.0.17213.0
Microsoft Analysis Services Client Tools 14.0.1016.232
Microsoft Data Access Components (MDAC) 10.0.16299.15
Microsoft MSXML 3.0 4.0 6.0
Microsoft Internet Explorer 9.11.16299.0
Microsoft .NET Framework 4.0.30319.42000
Operating System 6.3.16299
发布于 2019-01-23 03:37:06
一般来说,数据库支持某种类型的字符串聚合功能。例如,它在group_concat()中被称为MySQL,您只需这样做:
select gkey,
group_concat(distinct imdg_class)
from t
group by gkey;在Postgres中,函数是string_agg()。在Server中也是如此。在甲骨文中,它被称为listagg() --但不幸的是,它不会删除重复项,因此需要一个子查询。
Server中的string_agg()可在Server 2017+中使用。在此之前,您可以使用XML版本:
select gkey,
stuff( (select distinct ',' + imdg_class
from t t2
where t2.gkey = t.gkey
for xml path('')
), 1, 1, ''
)
from (select distinct gkey from t) t;https://stackoverflow.com/questions/54319476
复制相似问题