如何在SQL中将多个记录的值管道化为一个?

时间:2017-09-25 20:44:29

标签: pipe sql-server-2014

我想显示以下数据:

PID   SQ  SQ1  DS
123   12  1    ABC
321   13  1    BBC
321   13  2    CNN
322   15  1    DFG
321   13  3    AMG

像这样:

PID  DS_output
123  ABC
321  BBC|CNN|AMG
322  DFG

有人可以建议或发布我可以用来检索此查询的查询示例吗?

1 个答案:

答案 0 :(得分:0)

您可以使用FOR XML PATH的STUFF功能组合

CREATE TABLE #t (PID INT, SQ INT, SQ1 INT, DS VARCHAR(10))

INSERT INTO #t
VALUES (123, 12, 1, 'ABC')
    , (321, 13, 1, 'BBC')
    , (321, 13, 2, 'CNN')
    , (322, 15, 1, 'DFG')
    , (321, 13, 3, 'AMG')

SELECT DISTINCT PID, stuff((
            SELECT '|' + it.DS
            FROM #t it
            WHERE PID = ot.PID
            ORDER BY it.PID
            FOR XML PATH('')
            ), 1, 1, '')
FROM #t ot