Sql 通过将列填充到列表中来组合多行。

Sql 通过将列填充到列表中来组合多行。,sql,sql-server,coldfusion,coldfusion-10,Sql,Sql Server,Coldfusion,Coldfusion 10,我有四个表:员工、协会、员工、协会、协会项目。 下面的select查询将生成连接的行 注意:我为SQL和Coldfusion语言制作了标记,这是因为我使用Coldfusion作为脚本语言。我不确定是应该依赖SQL还是使用脚本语言 质疑 电流选择输出 正如您所注意到的,除了“itemvalue”列之外,还有多个类似的行。 我需要合并这些行以产生以下结果 需要的产出 您可以使用以下方法实现此目的: SELECT AE.userid, E.firstname, A.titl

我有四个表:员工、协会、员工、协会、协会项目。 下面的select查询将生成连接的行

注意:我为SQL和Coldfusion语言制作了标记,这是因为我使用Coldfusion作为脚本语言。我不确定是应该依赖SQL还是使用脚本语言

质疑

电流选择输出

正如您所注意到的,除了“itemvalue”列之外,还有多个类似的行。 我需要合并这些行以产生以下结果

需要的产出

您可以使用以下方法实现此目的:

SELECT AE.userid,
       E.firstname,
       A.title,
       STUFF((SELECT ',' + [AI.itemvalue]
              FROM association_items AI
              WHERE AI.associationidFK = AE.associationidFK
              FOR XML PATH('')), 1, 1, '') AS itemvalue
FROM associations_employees AE
INNER JOIN employees E ON E.userid = AE.useridFK
INNER JOIN associations A ON A.associationid = AE.associationidFK
GROUP BY AE.userid, E.firstname, A.title,

这尚未测试,因此可能需要进行一些微调。

如果需要ColdFusion解决方案,cfoutput的group属性将起作用。步骤1是将ORDERBY子句添加到查询中

order by userid, title
接下来是您的cfoutput标签

<cfoutput query="yourquery" group = "userid">
  <cfoutput group = "title">
    #userid # #firstname# #lastname# #title#
    <cfset items = ''>
    <cfoutput>
      <cfset items = listappend(items,itemvalue,';')>
    </cfoutput>
    #items#
  </cfoutput>
</cfoutput>

这是基本的方法。您必须添加格式,并找出如何从itemvalue列表中排除尾随分号。

您可以使用类似于Dan的数组方法。阵列的速度可能更快

<cfoutput query="yourquery" group = "userid">
  <cfoutput group = "title">
    #userid # #firstname# #lastname# #title#
    <cfset items = []>
    <cfoutput>
        <cfset ArrayAppend(items, itemvalue)>
    </cfoutput>
    #ArrayToList(items, ";")#
  </cfoutput>
</cfoutput>

我更新了它,删除了额外的查询属性,并给出了一个带分隔符的列表。那么,为什么会有否决票呢?
order by userid, title
<cfoutput query="yourquery" group = "userid">
  <cfoutput group = "title">
    #userid # #firstname# #lastname# #title#
    <cfset items = ''>
    <cfoutput>
      <cfset items = listappend(items,itemvalue,';')>
    </cfoutput>
    #items#
  </cfoutput>
</cfoutput>
<cfoutput query="yourquery" group = "userid">
  <cfoutput group = "title">
    #userid # #firstname# #lastname# #title#
    <cfset items = []>
    <cfoutput>
        <cfset ArrayAppend(items, itemvalue)>
    </cfoutput>
    #ArrayToList(items, ";")#
  </cfoutput>
</cfoutput>