【发布时间】:2016-01-05 16:02:32
【问题描述】:
我有一个输入表如下
Id Data
1 Column1: Value1
2 Column2: Value11
3 Column3: Value111
4 Column1: Value2
5 Column2: Value22
6 Column3: Value222
我正在寻找如下的输出
Column1 Column2 Column3
Value1 Value11 Value111
Value2 Value22 Value222
我怎样才能做到这一点?它可以通过使用 WHILE LOOP 和一些数学逻辑轻松完成,但如果可能的话,我正在寻找一个更优化的,如果可能的话,只通过 SELECT 查询(没有 LOOPS)。
我也尝试过使用 (':') 作为分隔符进行拆分,然后将 ROWS 转换为 COLUMNS (PIVOT),但有些无法继续。 (这是我的想法,人们可能有更好的想法)。
到目前为止我的拍摄
Declare @t table(Id int identity(1,1),Data varchar(1000))
Insert into @t Values
('Column1: Value1'),('Column2: Value11'),('Column3: Value111')
,('Column1: Value2'),('Column2: Value22'),('Column3: Value222')
Select *
FROM @t
SELECT
F1.id,
F1.Data,
O.splitdata
FROM
(
SELECT *,
cast('<X>'+replace(F.Data,':','</X><X>')+'</X>' as XML) as xmlfilter from @t F
)F1
CROSS APPLY
(
SELECT fdata.D.value('.','varchar(50)') as splitdata
FROM f1.xmlfilter.nodes('X') as fdata(D)) O
【问题讨论】:
-
您是否有固定数量的列,它们的排列方式是否与您的样本中的显示方式一致?
-
is
Column1 Column2 Column3是列名或只是一个值
标签: sql-server tsql pivot sql-server-2014