【发布时间】:2018-11-06 21:16:42
【问题描述】:
我有这个 SQL 查询,它每天返回每个商店的产品 sku 的总和。它会跳过不返回任何值的商店/名称。
目前的输出是:
day location sku totalSold
1/1/18 1 1 2
1/2/18 2 2 1
1/4/18 1 4 3
我希望输出更像:
day location sku totalSold
1/1/18 1 1 2
1/1/18 1 2 0
1/1/18 1 3 0
1/1/18 1 4 3
1/1/18 2 1 2
1/1/18 2 2 0
1/1/18 2 3 0
1/1/18 2 4 0
1/2/18 1 1 2
1/2/18 1 2 0
1/2/18 1 3 0
这是我当前的 sql 查询:
SELECT tb1.timestamp, tb1.store, tbl2.sku, SUM(CAST(tbl2.quantity as integer)) as 'totalSold'
FROM tb1
LEFT JOIN tbl2 on tbl1.id = tbl2.id
WHERE tbl2.sku IN (select sku from tbl3) --tbl3 is a view w/ list of skunames
GROUP BY tbl1.Timestamp, YEAR(timestamp), MONTH(timestamp), DAY(timestamp), tbl1.store, tbl2.sku
【问题讨论】:
-
将 tbl2 条件从 where 子句中取出,放入连接的
ON子句中。否则左连接行为被修改,结果集将仅包含来自 tb1 的记录,其中也满足 tb2 条件。 # 不会开始评论,因此您发布的代码不会解析。 -
我猜你想交叉加入你的日期/位置/skus,然后使用左加入来获得总销量。有多种方法可以做到这一点,具体取决于实际要求(由于某种原因,当前输出中的 sku 为 4,但未显示在所需的输出中,所以我不确定该怎么做是)。
-
谢谢!!我匆忙用python在这个问题中添加了评论,但它根本不在实际查询中。
-
去掉where子句会发生什么?
-
@MEdwin 它将返回 tbl2 中的所有 sku(数千个),而我只希望返回大约 30 个,而 tbl3 只是这 30 个 sku 的视图。
标签: sql sql-server tsql ssms sql-server-2017