我正在努力解决我最近的面试问题。 3维表(产品,商店和日期)和1个事实表(销售)。问题是要求一个T-SQL解决方案,该解决方案将返回过去一个月每个商店每天销售不的产品数量。
那艘船已经航行......机会已经过去,但我已经花了很多时间试图回到解决方案,无济于事,并希望关闭循环。非常感谢任何指导。
答案 0 :(得分:2)
通常使用覆盖表来回答“未发生的事情”。这可能是一个“技巧”问题,看你是否知道使用Factless Fact表做负面分析。
此表格为一行/天/产品/商店,用于标识特定日期特定商店中可用的所有商品。然后,您可以使用该表并对从销售事实中销售的产品进行一组减法,以获得未销售的产品。
加入产品暗淡是没有意义的,因为并非所有商店都可以销售所有产品。这可能只是一个问题,看你是否可以构建必要的SQL,但我认为这是一个很糟糕的问题。
答案 1 :(得分:1)
试试这个:
任何更多帮助,这可能对其他人不公平。
答案 2 :(得分:0)
查询中包含的日期
- 表
CREATE TABLE dimProduct(ProductID INT,ProductName VARCHAR(50))
CREATE TABLE dimStore(StoreID INT,StoreName VARCHAR(50))
CREATE TABLE dimDate(DateID INT,dimDate VARCHAR(50))
CREATE TABLE factSales(ProductID INT,StoreID INT,DateID INT)
- =最终查询
SELECT StoreID,DateID,count(ProductID) AS CountOfProductsNotSold
FROM
(
SELECT StoreID,DateID,ProductID FROM dimProduct CROSS JOIN dimStore CROSS JOIN dimDate WHERE dimDate >= '01/01/2013'
EXCEPT
SELECT StoreID,d.DateID,ProductID FROM factSales s JOIN dimDate d ON s.DateID = d.DateID WHERE dimDate >= '01/01/2013'
)T
GROUP BY StoreID,DateID