【发布时间】:2014-11-07 15:06:16
【问题描述】:
目标
我正在尝试从一个表中选择一个用户 ID,并从 DB2 中的另一个表中选择相关项的计数。我正在尝试在 SSIS 中执行此查询以将数据导入 SQL Server 数据库,在该数据库中我将对数据执行其他转换过程。我提到 SSIS 不是因为我认为它是问题的一部分,而只是为了提供背景信息。我相当肯定问题在于我在 DB2 方面的经验不足。我的背景是 SQL Server,我对 DB2 很陌生。
问题
当(我假设)计数为 0 时会出现问题。当我在 DB2 命令编辑器中执行查询时,它只返回一个空白行。我希望它至少返回用户 ID,然后只有一个空白字段用于计数,但整行都是空白的。然后这会导致我的 SSIS 包出现问题,它试图在没有数据的情况下进行一堆插入。
再次重申,这是一个假设,因为我没有使用 DB2 命令编辑器或 DB2 的经验,但是如果我稍微打开日期,我会得到预期的结果(用户 ID 和计数)。
我尝试将计数包装在 COALESCE() 函数中,但这并没有解决问题。
查询
SELECT a.user_id, COUNT(DISTINCT b.item_number) as Count
FROM TABLE_A a
LEFT OUTER JOIN TABLE_B b
ON a.PRIMARY_KEY = b.PRIMARY_KEY
WHERE a.user_id = '1234'
AND b.DATE_1 >= '01/01/2013'
AND b.DATE_1 <= '01/05/2013'
AND b.DATE_2 >= '01/01/2013'
AND b.DATE_2 <= '12/23/2014'
AND a.OTHER_FILTER_FIELD = 'ABC'
GROUP BY a.user_id
【问题讨论】:
-
您的外连接实际上是一个内连接,因为您在连接之后 对 TABLE_B 应用谓词,因此不匹配的行被消除。将与日期相关的谓词放入连接条件中。