按经典ASP分组

时间:2018-12-28 18:14:03

标签: sql-server-2008 vbscript asp-classic

我在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。

1 个答案:

答案 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

输出:

enter image description here

有关STUFF功能的文档:

https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017