我有文本文件,其中包含以下详细信息
ID |NO|Rnk|SP1|Sp2
0000177|01| 1| N|N
0000178|01| 1| P|P
0000178|01| 2| GP|GP
0000179|01| 1|ORS|ORS
0000180|01| 1| GP|GP
0000181|01| 1| GP|GP
0000181|01| 2| GS|GS
0000182|01| 1| GP|GP
0000183|01| 1| FM|FM
0000183|01| 2| CM|CM
0000183|01| 3| RM|RM
我必须像这样创建Out
ID |NO|Rnk|SPC
0000177|01| 1|N
0000178|01| 1|P GP
0000179|01| 1|ORS
0000180|01| 1|GP
0000181|01| 1|GP GS
0000182|01| 1|GP
0000183|01| 1|FM CM RM
欢迎您的建议......是否可以使用Pivot Transformation? 请解释你的answares?
答案 0 :(得分:0)
如果将文本文件导入表格,则可以在SQL中重新组织数据。 SQL将类似于以下内容:
SELECT
TFT.ID,
MIN(TFT.NO) AS NO,
MIN(TFT.Rnk) AS Rnk,
TFT0.SPC
FROM
TextFileTable TFT
INNER JOIN (
SELECT DISTINCT
TFT_D.ID,
STUFF((SELECT ' ' + Sp2 FROM TextFileTable TFT_X WHERE TFT_D.ID = TFT_X.ID FOR XML PATH('')), 1, 1, '') AS SPC
FROM
TextFileTable TFT_D
) TFT0
ON
TFT.ID= TFT0.ID
GROUP BY
TFT.ID,
TFT0.SPC
ORDER BY
TFT.ID
假设Sp1和Sp2总是相同的,你总是想要最小的NO,而你总是想要最低等级。从最里面的逻辑向外开始,使用FOR XML PATH('')技巧连接一个以空格分隔的Sp2值列表(示例说明:http://fergusondigital.com/Blog/post.cfm/using-for-xml-path-and-stuff-to-coalesce)。将每个列表与其ID相关联,获取DISTINCT行以获得每个列表一行。然后按ID和SPC对这些行进行分组,按ID连接以获取NO和Rnk值。