我有一些类似于下面显示的格式的文本文件。没有聚合的SQL数据透视表
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
ED一起列出所有的属性名称)。
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,'')
是一个数据透视表最好的办法吗?不需要聚合。有没有更好的方法来完成这一点?我想以列格式列出FIELD名称旁边的数据。
谢谢!
您需要将文本文件重新导入到具有IDENTITY列的表中,以便您可以创建ENTRY与其后续FIELD之间的关系。与文本文件不同,表格是无序集合。 –
@steve_o,我刚刚编辑了我的答案。它应该做你想要的... – Shnugo