拆分字符串和数据透视结果 - SQL Server 2012

时间:2018-01-11 19:08:35

标签: sql sql-server sql-server-2012

我正在使用SQL Server 2012,我有一个名为XMLData的表,如下所示:

|         Tag  |         Attribute           |  
|--------------|-----------------------------|
|     tag1     | Cantidad=222¬ClaveProdServ=1|
|     tag1     | Cantidad=333¬ClaveProdServ=2|

Tag有许多重复值,不同的是列Attribute,它有一串由“¬”分隔的属性。我想分离属性列表,然后转动表,以便标记是列名。

我想要的结果是这样的:

|      tag1       |     tag1       |  
|-----------------|----------------|
| Cantidad=222    | Cantidad=333   |
| ClaveProdServ=1 | ClaveProdServ=2|  

我有一个自定义函数可以拆分字符串,因为SQL Server 2012没有预制函数来执行此操作。我收到的功能 string作为参数,分隔符如下:

select *
from [dbo].[Split]('lol1,lol2,lol3,lol4',',')

此函数将返回此:

|   item | 
|--------|
| lol1   | 
| lol2   |  
| lol3   |

我找不到一种方法来传递列Attribute的值作为此函数的参数,如下所示:

SELECT *
FROM Split(A.Attribute,'¬'),XMLData A

然后将列Tag的值作为每组属性的列名称

1 个答案:

答案 0 :(得分:0)

我的魔法水晶球告诉我,你有 - 为什么 - 决定这样做,任何关于的评论都不存储CSV数据对你来说很烦人。

然而......

如果这只是一个语法问题,请尝试这样:

SELECT t.Tag
      ,t.Attribute
      ,splitted.item
FROM YourTable AS t
CROSS APPLY dbo.Split(t.Attribute,'¬') AS splitted 

否则会显示更多相关详细信息。请阅读How to ask a good SQL questionHow to create a MCVE