ssis - SSIS 包 - 基于多列的计数
问题描述
我需要创建一个 SSIS 包,为我提供 workdoneby(承包商/公司)的计数。
来自 sql server db 的输入表:
我需要计算承包商和公司在特定日期 + 站点 + 工作类型 + accountno 的订单数量。
我的输出应该是这样的。
有人可以帮助我如何创建一个包以获得所需的输出吗?
解决方案
由于数据在表中,您可以要求数据库引擎进行计算逻辑。
设置
我创建了一个临时表并用提供的数据填充它。
CREATE TABLE
#Source
(
[Date] date
, Station char(3)
, worktype char(2)
, Accountno varchar(10)
, workdoneby varchar(10)
)
INSERT INTO
#Source
(
Date
, Station
, worktype
, Accountno
, workdoneby
)
VALUES
('2018-06-24', 'RMS', 'RH', 'I.145.001', 'Company')
, ('2018-06-24', 'RMS', 'PH', 'I.145.001', 'Contractor')
, ('2018-06-24', 'RMS', 'PH', 'I.145.002', 'Company')
, ('2018-06-24', 'RMS', 'PH', 'I.145.002', 'Contractor');
查询时间
现在就来查询吧!我发现将这些问题分解成更小的部分很有帮助。我要做的第一件事是将workdoneby
列分成两列,分别为 1 或 0
SELECT
S.Date
, S.Station
, S.worktype
, S.Accountno
, CASE S.workdoneby
WHEN 'Contractor' THEN 1
ELSE 0
END AS contractorCount
, CASE S.workdoneby
WHEN 'Company' THEN 1
ELSE 0
END AS companyCount
FROM
#Source AS S
运行它让我看看结果,看看我仍然有 4 行,我得到了正确的实体计数。
下一步是折叠/汇总/汇总这些值。您指出我们应该按日期/电台/工作类型/帐户号分组,这正是我们要做的。
如果我采用第一个查询并将其设为派生表,我发现调试起来更容易,因此基本形式现在变成了SELECT * FROM (ORIGINAL QUERY HERE) AS D
这样
SELECT
D.Date
, D.Station
, D.worktype
, D.Accountno
, D.contractorCount
, D.companyCount
FROM
(
SELECT
S.Date
, S.Station
, S.worktype
, S.Accountno
, CASE S.workdoneby
WHEN 'Contractor' THEN 1
ELSE 0
END AS contractorCount
, CASE S.workdoneby
WHEN 'Company' THEN 1
ELSE 0
END AS companyCount
FROM
#Source AS S
) D
现在您可以看到它给出了相同的原始结果,我们将SUM
在contractorCount 和companyCount 列以及GROUP BY
日期/工作站/工作类型/帐户号上使用该函数
SELECT
D.Date
, D.Station
, D.worktype
, D.Accountno
, SUM(D.contractorCount) AS contractor
, SUM(D.companyCount) AS company
FROM
(
SELECT
S.Date
, S.Station
, S.worktype
, S.Accountno
, CASE S.workdoneby
WHEN 'Contractor' THEN 1
ELSE 0
END AS contractorCount
, CASE S.workdoneby
WHEN 'Company' THEN 1
ELSE 0
END AS companyCount
FROM
#Source AS S
) D
GROUP BY
D.Date
, D.Station
, D.worktype
, D.Accountno;
SSIS
现在我们的数据看起来符合预期,在 SSIS 中您需要对其进行处理。您的问题没有指定您需要做什么,但您可能会使用 a将Data Flow Task
这些聚合数据从一个地方推送到另一个目的地(不同的服务器、Excel 等),或者您要将此数据推送到在同一台服务器上的表,在这种情况下,您将使用Execute SQL Task
推荐阅读
- javascript - 通过角度 5 的获取请求加载 iframe
- python - pytest 不使用 mock.patch 引发 HTTPError
- reactjs - 从 mob-x 存储渲染数据
- git - 如何配置“git push -u”来推断远程分支名称?
- java - Java NIO Files count() 计算行数的方法
- c# - 从 azure 存储以 zip 格式下载多个 blob 文件
- tmux - Tmux 滚动模式:vim 键绑定?
- .net - 无法使用 vb.net 从网页源中获取非英文字符
- jquery - 在 jquery javascript 中获取 nth-child
- python - 了解 Python 导入和循环依赖的行为