从SQL数据列中检索(粉碎)SQL Server中的多个值到表中的相同单元格(行/列交集)

时间:2014-05-27 18:16:00

标签: sql sql-server xml

我有一个带有xml数据列(XMLcol)和ID列的表(T)。

===========================

以下是XML数据:

"( <RootNode>    
<Node1>    
<Line_id_Node>1 </Line_id_Node>    
<A>    
<B>    
<D>Val1 </D>    
</B>    
<B>    
<D>Val2 </D>    
</B>    
<B>    
<D>Val3 </D>    
</B>    
</A>    
</Node1>


<Node1>    
<Line_id_Node> 2 </Line_id_Node>    
<A>    
<B>    
<D>Val4 </D>    
</B>    
<B>    
<D>Val2 </D>    
</B>    
</A>    
</Node1>


<Node1>    
<Line_id_Node> 3 </Line_id_Node>    
<A>    
<B>    
<D>Val5 </D>    
</B>    
</A>    
</Node1>    
</RootNode>)"

预期的O / P:

-------------------------------------------------
Line_id_Node                Column_D
-------------------------------------------------
1                           val1, val2, val3
2                           val4, val2
3                           val5

我想在SINGLE Cell中获得上述所有三个值。尝试交叉应用,创建变量等,但没有确定正确的语法。

如果你至少可以举例说明如何用XML连接类似节点中的值,那也会有所帮助。我想要的东西与我们使用相同的方式... STUFF FOR FOR XML PATH(用于逗号分隔输出)。

我们应该使用@XMLhandle,

sp_xml_preparedocument

@XMLDocument, 

sp_xml_removedocument

??任何帮助将非常感谢!

谢谢。

1 个答案:

答案 0 :(得分:0)

DECLARE @T TABLE (id int, XMLcol xml)
INSERT @T VALUES
(1,'<C><D>Val1 </D></C><C><D>Val2 </D></C><C><D>Val3 </D></C>'),
(2,'<C><D>Val4 </D></C><C><D>Val5 </D></C><C><D>Val6 </D></C>')

SELECT id,(
  SELECT STUFF((SELECT ','+v.value('D[1]','varchar(max)')
  FROM @T
  CROSS APPLY XMLCol.nodes('C') x1(v)
  WHERE id = t.id
  FOR XML PATH('')
  ),1,1,'')
)
FROM @T t

--------------------
id  (No column name)
1   Val1 ,Val2 ,Val3 
2   Val4 ,Val5 ,Val6