按字符串的一部分进行SQL分组&返回逗号分隔的

按字符串的一部分进行SQL分组&返回逗号分隔的,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我正在尝试对字符串中的数据进行分组,如“Item-%”。问题是这可以是字符串中的任意位置。更复杂的是,我需要返回逗号分隔的列表,其中只包含相同的项-%text 以下是数据的外观: 案卷问题和回答 我希望返回如下所示的数据: 到目前为止,我的代码是: SELECT JobNumber, substring(Answer, patindex('Item%', answer) - 1, 7), Notes = STUFF((SELECT ', ' + rt

我正在尝试对字符串中的数据进行分组,如“Item-%”。问题是这可以是字符串中的任意位置。更复杂的是,我需要返回逗号分隔的列表,其中只包含相同的项-%text

以下是数据的外观:

案卷问题和回答

我希望返回如下所示的数据:

到目前为止,我的代码是:

SELECT 
    JobNumber, 
    substring(Answer, patindex('Item%', answer) - 1, 7), 
    Notes = 
       STUFF((SELECT ', ' + rtrim(Answer)
              FROM DocketQuestionsAndAnswers b 
              WHERE b.JobNumber = a.JobNumber
                AND Screen like '%cut%'
                AND Answer like '%item%'
              FOR XML PATH('')), 1, 2, '')
FROM 
    DocketQuestionsAndAnswers a
WHERE 
    JOBNUMBER IN (SELECT JobNumber
                  FROM /* Query to filter job number */)
GROUP BY 
    JobNumber, 
    substring(Answer, patindex('Item%', answer) - 1, 7)
HAVING 
    substring(Answer, patindex('Item%', answer) - 1, 7) like '%item-%'
这只会让我得到这些数据:


如何仅获取每个项目的逗号分隔值?我的示例只包含1个作业编号,但基于我的子查询,我需要它。如何做到这一点呢?

为你的答案的STUFF子查询添加一个额外的条件不会让你得到结果吗

SELECT 
JobNumber, 
substring(Answer, patindex('%Item%', answer), 7), 
Notes = 
   STUFF((SELECT ', ' + rtrim(Answer)
          FROM DocketQuestionsAndAnswers b 
          WHERE b.JobNumber = a.JobNumber
            AND substring(a.Answer, patindex('%Item%', a.answer), 7) = 
               substring(b.Answer, patindex('%Item%', b.answer) , 7)
            AND Screen like '%cut%'
            AND Answer like '%item%'
          FOR XML PATH('')), 1, 2, '')
FROM 
DocketQuestionsAndAnswers a
WHERE 
JOBNUMBER IN (SELECT JobNumber
              FROM /* Query to filter job number */)
GROUP BY 
JobNumber, 
substring(Answer, patindex('%Item%', answer), 7)   --All patindexes changed from 'Item%'
HAVING 
substring(Answer, patindex('%Item%', answer), 7) like '%item-%'

听起来合乎逻辑,但抛出错误,列“DocketQuestionsAndAnswers.Answer”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。OOps缺少该位。现在修复了更近的问题,只是现在它忽略了在字符串开头有项-%的答案字段。哦,我找到了。那是我的帕蒂迪斯。模式应为“%Item%”以获取所需内容。查询是否正确?它仍然会给你3行,对吗?