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 が必要であり、常に最小のランクが必要であるという前提があります。最も内側のロジックから始めて、FOR XML PATH('') トリックを使用して、スペースで区切られた Sp2 値のリストを連結します (説明例: http://fergusondigital.com/Blog/post.cfm/using-for-xml -path-and-stuff-to-coalesce )。各リストをその ID に関連付け、DISTINCT 行を取得してリストごとに 1 行を取得します。次に、これらの行を ID と SPC でグループ化し、ID で結合して NO と Rnk の値を取得します。

于 2014-07-12T13:01:51.573 に答える