没有聚合

时间:2015-08-26 20:30:54

标签: sql-server pivot aggregate

我有许多文本文件,格式类似于下面所示的格式。

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名称旁边的数据。

谢谢!

0 个答案:

没有答案