下面是我现在使用的代码。在现实生活中,@stab 表很大(它是普通表而不是变量),并且有很多串联列,而不仅仅是 2 个。我想知道是否有比我在这个示例中使用的更好的解决方案。我使用旧的 MSSQL,因此 STRING_AGG() 不可用。我的结果是正确的,但我想知道是否有更好的方法,例如选择一个 XML,然后从该 XML 中选择列。
declare @stab table (id int , v1 varchar(10),v2 varchar(10))
declare @xmlstring xml
insert into @stab values (1,'aaa','1111'),(1,'bbbb','2222'),(2,'cccc','3333'),(2,'dddd','4444')
--select * from @stab t1
select
id,
stuff((select ','+v1 from @stab t2 where t1.id=t2.id for xml path('')) ,1,1,'')
,stuff((select ','+v2 from @stab t2 where t1.id=t2.id for xml path('')) ,1,1,'')
from @stab t1 group by id
另一种方法是
我并不是说它在任何方面都比您目前拥有的“更好”。
从积极的一面来看,它不需要进行多次查找,
@stab
因为它可以一次返回多个列。从负面来看,预计计划成本的成本要高得多,但对于 XML 运营商来说,这尤其不可靠。您需要根据实际数据进行测试,看看是否更好/更差。