如何将表格转换为平面文件,每个字段都在新行上

Posted

技术标签:

【中文标题】如何将表格转换为平面文件,每个字段都在新行上【英文标题】:How to convert table to flat file with each field on new row 【发布时间】:2019-06-18 02:07:30 【问题描述】:

我有一个带有用户和地址信息的管道分隔文件,格式如下:

userid|name|street|city|state|zip
123456|fred|123 apple st|Navada|MO|64772

我将信息输出到另一个平面文件中,格式如下:

*** DOCUMENT BOUNDARY ***
FORM=LDUSER
.USER_ID.   123456
.USER_ADDR1_BEGIN.
.STREET.   123 apple st
.CITY.   Nevada
.STATE.   MO
.ZIP.   64772
.USER_ADDR1_END.

是否有通用的 SQL 或 PowerShell 脚本可以进行这种转换?我用“将列转换为行”、“将数据透视表转换为平面文件”等短语进行了搜索,但没有发现任何有用的信息。我不确定如何调用输出文件的格式,点/行分隔?分层平面文件?

【问题讨论】:

您的目标是将文件从一种格式转换为另一种格式。为什么要在SQL Server 中这样做? 【参考方案1】:

据我所知,在 SQL Server 中没有实现此目的的通用方法,但如果您设法将数据保存到表中,那么以下自定义查询将帮助您将数据呈现为可以导出的单个列之后

CREATE TABLE #temp (UserID INT, Name VARCHAR(40), Street VARCHAR(40), City VARCHAR(40), State VARCHAR(40), Zip INT)

INSERT INTO #temp VALUES
(101,'Kevin Joy','Ap #659-7998 Integer St.','Hinckley','4863 Ligula. Av.',98417),
(102,'Peter Romell','979-4806 Massa Road','Knoxville','4568 A Street',90825),
(103,'Mariam Sid','P.O. Box 547, 8395 Ultrices Av.','Beervelde','Ap #758-6207 Non, Av.',486291),
(104,'Roberta Kotun','9482 Habitant Ave','Northumberland','Ap #620-957 Rutrum Av.',476177)

;WITH CTE AS (

SELECT 
    CAST(UserID AS VARCHAR(MAX)) AS UserID
    ,Name
    ,Street
    ,City
    ,[State]
    ,CAST(Zip AS VARCHAR(MAX)) AS Zip
FROM #temp )

SELECT '*** DOCUMENT BOUNDARY ***' AS [Data]
UNION ALL
SELECT 'FORM=LDUSER'
UNION ALL
SELECT T.Result
FROM CTE
CROSS APPLY (VALUES ('.USER_ID.'+' '+UserID,'Col1'),('.USER_ADDR1_BEGIN.','Col2'),('.STREET.'+' '+Street,'Col3'),('.CITY.'+' '+City,'Col4'),('.STATE.'+' '+[State],'Col5'),('.ZIP.'+' '+Zip,'Col6'),('.USER_ADDR1_END.','Col7')) AS T(Result,Value)

查询结果如下,

*** DOCUMENT BOUNDARY ***
FORM=LDUSER
.USER_ID. 101
.USER_ADDR1_BEGIN.
.STREET. Ap #659-7998 Integer St.
.CITY. Hinckley
.STATE. 4863 Ligula. Av.
.ZIP. 98417
.USER_ADDR1_END.
.USER_ID. 102
.USER_ADDR1_BEGIN.
.STREET. 979-4806 Massa Road
.CITY. Knoxville
.STATE. 4568 A Street
.ZIP. 90825
.USER_ADDR1_END.
.USER_ID. 103
.USER_ADDR1_BEGIN.
.STREET. P.O. Box 547, 8395 Ultrices Av.
.CITY. Beervelde
.STATE. Ap #758-6207 Non, Av.
.ZIP. 486291
.USER_ADDR1_END.
.USER_ID. 104
.USER_ADDR1_BEGIN.
.STREET. 9482 Habitant Ave
.CITY. Northumberland
.STATE. Ap #620-957 Rutrum Av.
.ZIP. 476177
.USER_ADDR1_END.

【讨论】:

以上是关于如何将表格转换为平面文件,每个字段都在新行上的主要内容,如果未能解决你的问题,请参考以下文章

自动化 Excel 工作 - 将平面文件转换为 Excel 电子表格

Powershell pscustomobject 格式-表格新行而不是一行

SSIS 任务数据流 - 将平面时间值 HHMMSS 转换为 MSSql Time(7) 字段

将3D平面转换为2D坐标系

如何将具有重复字段值的表格数据转换为层次结构的 JSON?

如何将 JSON 文件转换为使用 Google Apps 脚本分隔的新行?