0

在 SSIS 2012 数据流中,我将一个 excel 文档作为我的源,其中包含 200 行记录。excel 文档有一列“名称”。我想查找数据库并找出 200 行中的每一行有多少条记录具有该“名称”。并将此计数添加为输出列。

EG:从 MyTable 中选择 count(*) 其中 Name = ?

名称计数

标记 4

山姆 2

蒂姆 9

我看不到如何将 Aggregate 与参数一起使用。行计数只是对所有行进行计数。我尝试了一个 SQL 执行任务,但又一次,我看不到如何引入 Name 参数。

我认为这是一件基本的事情,但我在 SSIS 上的任何地方都找不到它。谁能告诉我哪里出错了?

4

1 回答 1

0

您正在寻找的解决方案是,Lookup Transformation但不是尝试使用参数,而是要计算所有名称的计数,然后基于匹配将列从 Excel 映射到表中的列。

需要注意的两件事是您的数据类型(它们必须匹配,并且来自 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 回答