SQL Server连接查询结果

时间:2014-10-29 17:46:32

标签: sql-server concatenation

我是sql server的新手。 我有一个查询从各种表中检索所需的数据。 结果与其他列一样,包含名称之类的内容,为简单起见而删除。

 id  xvalue
  1     x
  1     y
  1     z
  2     x
  2     y
  2     z
  3     x
  3     y
  3     z

我想用select包装查询,将结果集连接成一个像这样的新结果集。

  id   xvalue
  1     x,y,z
  2     x,y,z
  3     x,y,z

我试图找出如何使用for xml path选项并且似乎无法找到 正确的语法。

5 个答案:

答案 0 :(得分:1)

我们在SQL中有两个表,其中列(id,mdf,hist)另一个表有列(id,hist)。第一个表叫做historial,第二个表是resultado。然后我们需要在mfn相同时连接hist列并将结果复制到resultado表中的列hist。

DECLARE @iterator INT

SET @iterator = 1

WHILE(@iterator< 100)/ *行数* /

BEGIN

DECLARE @ListaIncidencias VARCHAR(MAX) = ''
SELECT @ListaIncidencias = @ListaIncidencias + ';' + p.hist
FROM historial p WHERE mfn = @iterator
SET @ListaIncidencias = SUBSTRING(@ListaIncidencias,2,LEN(@ListaIncidencias))
SELECT @ListaIncidencias as 'Incidencias'
INSERT INTO resultado(hist) VALUES(@ListaIncidencias) /* Insert results in new table */
SET @iterator = @iterator + 1

END

答案 1 :(得分:0)

像这样的东西应该为你做的伎俩。 SQL Server应该只有一个简单的语法。但它会给你一个逗号和空格分隔的xValues列表。

SELECT id
,STUFF(
               (SELECT DISTINCT
                    ', ' + t.xvalue
                    FROM tableName t
                   WHERE t.id = t1.id
                    ORDER BY ', ' + t.xvalue
                    FOR XML PATH(''), TYPE
               ).value('.','varchar(max)')
               ,1,2, ''
          ) AS xvalue

FROM tableName t1
GROUP BY id

答案 2 :(得分:0)

select  id,Ids=Stuff((SELECT ',' + xvalue FROM t t1 WHERE t1.id=t.id   

 FOR XML PATH (''))
             , 1, 1, '' )
from t
GROUP BY id

FIDDLE

答案 3 :(得分:0)

试试这个

CREATE TABLE #Tmp
    (
      id INT ,
      xValue VARCHAR(10)
    )

INSERT  INTO #Tmp VALUES  ( 1, 'x' )
INSERT  INTO #Tmp VALUES  ( 1, 'y' )
INSERT  INTO #Tmp VALUES  ( 1, 'Z' )
INSERT  INTO #Tmp VALUES  ( 2, 'A' )
INSERT  INTO #Tmp VALUES  ( 2, 'B' )


SELECT  id ,
        ( STUFF(( SELECT DISTINCT
                            ',' + CAST(xValue AS VARCHAR(20))
                  FROM      #Tmp
                  WHERE     id = t.id
                FOR
                  XML PATH('')
                ), 1, 1, '') ) AS Data
FROM    #Tmp t
GROUP BY id

答案 4 :(得分:0)

Azure SQL数据库和SQL Server 2016中有非常新的功能来处理这种确切的情况。例如:

select id, STRING_AGG(xvalue, ',') as xvalue
from some_table
group by id

STRING_AGG - https://msdn.microsoft.com/en-us/library/mt790580.aspx