我在mssql表中有一份应届毕业生列表,其中包含数年的续约时间。我的任务是按照研究生的身份列出他们,并且将他们的续订年份用逗号分隔,而不是每行一个。一些用户有多达8个续订。 它们是这样列出的:
Lisa Jones 123456 2001 CMC
Lisa Jones 123456 2002 CMC
Lisa Jones 123456 2003 CMC
最后我想看看:
Lisa Jones 123456 2001, 2002, 2003 CMC
有没有一种方法可以通过sql查询或asp函数来实现?我有2300多个记录,其中研究生ID是唯一的(123456),但续订日期不同。按研究生ID分组,总数为275。
答案 0 :(得分:2)
我本人将使用SQL进行此操作。在SQL Server 2008+中使用STUFF函数非常容易。
我使用表变量模拟了一个示例。您可以将表变量的用法替换为名为hubspot的真实表(将@hubspot替换为hubspot)。
示例设置(只需要运行完整的示例):
declare @hubspot table
(
name varchar(100),
grad_id int,
renewal_year varchar(10),
certification_type varchar(10)
)
insert into @hubspot values ('Lisa Jones', 123456, 2001, 'CMC')
insert into @hubspot values ('Lisa Jones', 123456, 2002, 'CMC')
insert into @hubspot values ('Lisa Jones', 123456, 2003, 'CMC')
insert into @hubspot values ('Lisa Jones', 123456, 2004, 'CMC')
在表中心上使用此SQL:
select name
, grad_id
, STUFF((select ', ' + renewal_year
from @hubspot b
where b.grad_id = a.grad_id
for xml path('')), 1, 2, '') as renewal_years
, certification_type
from @hubspot a
group by name
, grad_id
, certification_type
输出:
有关STUFF功能的文档:
https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017