我有许多文本文件,格式类似于下面所示的格式。
ENTRY,1,000000,Widget 4000,1,,,2,,
FIELD,Type,A
FIELD,Component,Widget 4000
FIELD,Vendor,Acme
ENTRY,2,000000,PRODUCT XYZ,1,,,3,
FIELD,Type,B
FIELD,ItemAssembly,ABCD
FIELD,Component,Product XYZ - 123
FIELD,Description1,Product
FIELD,Description2,XYZ-123
FIELD,Description3,Alternate Part #440
FIELD,Vendor,Contoso
它们已导入到以VARCHAR(MAX)
为唯一字段的表中。每个ENTRY
都是“新”项,所有后续FIELD
行都是该项的属性。 FIELD
旁边的数据是属性的列名。属性右侧的数据是我想要显示的数据。
所需的输出是:
ENTRY Type Component Vendor ItemAssembly Description1
1,000000,Widget 4000 A Widget 4000 Acme
2,000000,Product XYZ B Product XYZ-123 Contoso ABCD Product
我使用下面的代码获得了列名(我有几个表UNION
一起列出所有属性名称。)
select @cols =
STUFF (
(select Distinct ', ' + QUOTENAME(ColName) from
(SELECT
SUBSTRING(ltrim(textFileData),CHARINDEX(',', textFileData, 1)+1,CHARINDEX(',', textFileData, CHARINDEX(',', textFileData, 1)+1)- CHARINDEX(',', textFileData, 1)-1) as ColName
FROM [MyDatabase].[dbo].[MyTextFile]
where
(LEFT(textFileData,7) LIKE @c)
UNION
....
) A
FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'')
Pivot表是最好的方法吗?不需要聚合。有没有更好的方法来实现这一目标?我想以列格式列出FIELD名称旁边的数据。
谢谢!