SSIS查找数据库和计数结果

时间:2013-09-17 15:13:24

标签: ssis count lookup

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

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

名称计数

Mark 4

Sam 2

蒂姆9

我看不到如何在参数中使用Aggregate。 行计数只计算所有行。 我尝试了一个SQL执行任务但又一次,我看不到如何引入Name参数。

我认为这是一件基本的事情,但我无法在SSIS的任何地方找到它。有人可以告诉我哪里出错吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找的解决方案是Lookup Transformation,但您不是尝试使用参数,而是计算所有名称的计数,然后根据列将Excel中的列映射到列中。桌子。

需要注意的两件事是你的数据类型(它们必须匹配,来自Excel的内容以wstr / nvarchar / unicode开头)以及未知数的情况会发生什么。

样本实施

我的控制流看起来像这样

enter image description here

第一项任务确保我有一个“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);

在数据流中,我有一个使用聚合查询的查找

enter image description here

这将计算所有名称的所有计数

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

将姓名连接到姓名,然后点击NameCount将其添加到数据流