0

我有包含以下详细信息的文本文件

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

欢迎您的建议...是否可以使用枢轴转换?请解释你的答案?

4

1 回答 1

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,你总是想要最小的 Rank。从最里面的逻辑向外开始,您使用 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 值。

于 2014-07-12T13:01:51.573 回答