我的名字听起来像是绕口令,所以让我更好地解释一下自己。我有一个数据质量非常差的表,其中遇到以下情况:
CustomerId CustomerName
1 Jhon
1 Mary
2 Tom
CustomerId不是表的键。
我需要用列表填充Dictionary,但是当我执行以下操作时:
select distinct CustomerId, CustomerName from FullTransactions
它返回了先前的数据集,然后当我尝试填充组合框时,由于不允许重复相同的键而引发了异常。
您是否建议采取任何变通方法来使选择区分开来,从而返回唯一的customerId,所以我不介意是仅选择其中一个客户名还是每次出现时都将其合并为一个名字...
CustomerId CustomerName
1 Jhon-Mary
2 Tom
希望我现在能更好地解释自己... 十分感谢您能带来的任何光...
答案 0 :(得分:1)
在SQL Server 2017中,可以使用聚合函数string_agg()
:
select
CustomerId ,
string_agg(CustomerName, '-') within group (order by CustomerName) CustomerName
from mytable
group by CustomerId
在早期版本中,一种解决方案是使用for xml path
和stuff()
:
select distinct
t.CustomerId,
stuff(
(
select distinct ',' + t1.CustomerName
from mytable t1
where t1.CustomerId = t.CustomerId
for xml path(''), type
).value('.', 'nvarchar(max)'),
1,
0,
''
) CustomerName
from mytable t;