0

SSIS 2012 のデータ フローでは、200 行のレコードを含む Excel ドキュメントをソースとして取り込んでいます。Excel文書には「名前」列があります。DB を検索して、200 行ごとにその「名前」を持つレコードの数を調べたいと考えています。そして、このカウントを出力列として追加します。

例: Name = ? の MyTable から count(*) を選択します。

ネームカウント

マーク4

サム2

ティム9

パラメータで Aggregate を使用する方法がわかりません。行カウントは、すべての行をカウントするだけです。SQL 実行タスクを試してみましたが、Name パラメーターを取り込む方法がわかりません。

これは基本的なことだと思いますが、SSISのどこにも見つかりません。私が間違っている場所について誰かアドバイスできますか?

4

1 に答える 1

0

あなたが探している解決策はLookup Transformation、パラメータを使用しようとする代わりに、すべての名前のカウントを計算してから、Excel の列をテーブルの列にマッピングすることです。

注意すべき 2 つのことは、データ型 (それらは一致している必要があり、Excel から取得したものは wstr/nvarchar/unicode として始まります) と、不明な場合に何が起こるかです。

サンプル実装

私の制御フローは次のようになります

ここに画像の説明を入力

最初のタスクでは、サンプル データが入力された "MyTable" に相当するものがあることを確認します。

IF EXISTS
(
    SELECT * FROM sys.tables T WHERE T.name = 'so_18853565' and T.schema_id = schema_id('dbo')
)
BEGIN
    DROP TABLE dbo.so_18853565;
END;

CREATE TABLE dbo.so_18853565
(
    Name varchar(50) NOT NULL
);

INSERT INTO dbo.so_18853565

SELECT
    D.Name
FROM
    (
        VALUES ('Tim')
    ) D(Name)
    CROSS APPLY
    (
        SELECT TOP 9 1 AS foo FROM sys.all_columns AS AC
    ) X(foo)
UNION ALL
SELECT
    D.Name
FROM
    (
        VALUES ('Mark')
    ) D(Name)
    CROSS APPLY
    (
        SELECT TOP 4 1 AS foo FROM sys.all_columns AS AC
    ) X(foo)
UNION ALL
SELECT
    D.Name
FROM
    (
        VALUES ('Sam')
    ) D(Name)
    CROSS APPLY
    (
        SELECT TOP 2 1 AS foo FROM sys.all_columns AS AC
    ) X(foo);

データ フローでは、集計クエリを使用するルックアップがあります。

ここに画像の説明を入力

これにより、すべての名前のすべてのカウントが計算されます

SELECT
    S.Name
,   COUNT(1) AS NameCount
FROM
    dbo.so_18853565 AS S
GROUP BY
    S.Name;

名前を名前に接続し、クリックNameCountしてそれをデータフローに追加します

于 2013-09-17T15:44:21.113 に答える