如何添加包含值列表的附加列?

时间:2014-11-21 08:55:12

标签: sql-server-2008

1)我有一个查询将操作列表写入temp table1:

declare @table1 table (ActionName varchar(250), ActionDate datetime, ... Description varchar(100))

insert into @table1(ActionName, ActionDate, ... Description)
select --Search actions by ActionName

这些操作可以有多个操作日期,这很重要,这意味着我们可以拥有多个具有相同操作名称但操作日期不同的记录。

2)我必须减少table1以使所有动作名称只出现一次,但是附加的字段DateList(逗号分隔的字符串)应该包含该动作的所有日期动作(ActionDate字段)的列表:

declare @table2 table (ActionName varchar(250), ActionDate datetime, ... Description varchar(100), DateList varchar(4000))

我知道如何创建行动日期列表:

declare @dateList varchar(4000)
select @dateList = coalesce(@dateList + ', ', '') + convert(varchar, ActionDate, 120)
from @temp

但是,我不确定如何将其纳入整个解决方案。

1 个答案:

答案 0 :(得分:1)

您需要将列表创建代码包装在一个函数中,然后在表格中使用它,如下所示:

insert into @table2
select ActionName, uf_GetDateList(ActionName)
from @table1
group by ActionName

现在功能本身是一个棘手的部分。你需要以某种方式将@ table1传递给那里。您可以将@ table1转换为临时表#table1,然后您可以执行以下操作:

select @dateList = coalesce(@dateList + ', ', '') + convert(varchar, ActionDate, 120)
from #temp1
where ActionName=@ActionName

或者您可以使用table-valued parameter将表变量传递给函数。