2016-12-01 22 views
1

SQL選択からSSISを使用してプレーンテキストを作成しようとしています。問題は、SSISがテーブルのようなファイルを作成し、特定の形式で必要とすることです。SSIS:データを可変幅の固定長テキストに変換

は例えば、私はこの結果を持っている:

bill_id | concept |concept_type |amount | 
-----------|------------|-------------|-------| 
334455  |concept1 |product  |12  | 
334455  |concept2 |product  |10,5 | 
334455  |concept3 |service  |45,8 | 
334455  |concept4 |service  |1,05 | 
334455  |concept5 |service  |12,5 | 
334455  |concept6 |service  |14,6 | 
334455  |concept7 |service  |108 | 

をそして、私はこのような何かに変換する必要があります。

00 334455           
19             
10 concept1  12.00        
20 concept2  10.50        
17             
10 concept3  45.80        
20 concept4  1.05        
30 concept5  12.50        
40 concept6  14.60        
50 concept7  108.00        
21 total   204.45        

だから、私は最初の行、IDを持っています最初の列の値。 00は、行がIDであることを示します。 次に、19の製品コンセプトを開始し、次に各コンセプトのラインを示します。 17と同じですが、サービスの概念があります。 最後の21は、すべての概念の合計です。

私はそれがC#アプリケーションで行うことができますが、私はdtsファイルを作ることができるようにSSISでやろうとしていたことを知っています。

可能ですか?どうしたらいいですか?

おかげであなたのタスクのための

+0

C#でどのように処理されているか分かっているので、スクリプトコンポーネントを追加してそこにコードを書くことができます。 – DenStudent

答えて

0

いくつかのアプローチ:

  1. としては、コメントでは、あなたがC#で変換スクリプトを書いて、あなたがやりたいことができました。それは、特に複雑な変換のために行く方法です。
  2. 純粋なSSISの方法では、タスクをサブタスクに分割する必要があります。私。 concept_type、クエリにループを編成、bill_idによってループ群で、全てbill_idsのリストを取得し、SQLからデータを抽出し、bill_idによってフィルタリング合計、クエリSQLデータを計算し、concept_typeのリストを取得しますbill_idconcept_typeでフィルタリングされたSQLデータは、Row Numberスクリプトを使用してデータフローを実行します。次に、結果をRecordsetとして格納し、後続のループですべてのレコードセットを収集します。
    問題が表示されますか?変換には多くのデータグループ化が必要であり、レコードセット全体で行うことができます。 SSISは、データ変換をストリーミングするとき、つまりラインスコープで輝きます。

タスクに戻る - 私はむしろSSISとC#Script Taskを実行したいと思います。 SSIS Execute SQLタスクは結果セットをフェッチしてObject変数に格納します。スクリプトタスクはObject変数からデータセットを取得し、LINQなどですべての変換を行います。その後、結果をC#でファイルに格納します。

+0

ありがとう、私はSSISで簡単にやり遂げる方法を見落としているのかどうか疑問に思っていました。データは実際にはより複雑で、変換と同じですが、私はsqlを使ってカーソルを作成することも考えましたが、最も簡単な方法はSSIS内のC#です。 – Raistlin

+0

VB.Netスクリプトタスクも実行可能です。 –

関連する問題