按字符串的一部分进行SQL分组&返回逗号分隔的
我正在尝试对字符串中的数据进行分组,如“Item-%”。问题是这可以是字符串中的任意位置。更复杂的是,我需要返回逗号分隔的列表,其中只包含相同的项-%text 以下是数据的外观: 案卷问题和回答 我希望返回如下所示的数据: 到目前为止,我的代码是:按字符串的一部分进行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
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行,对吗?