查询具有两个外连接的3个表

时间:2015-01-22 20:33:42

标签: sql-server join

运行T-SQL查询以连接3个表,dimStores,fctSales,dimDates时遇到问题。

我需要保留dimStores(所选商店列表)和dimDates(日期选择)以及fctSales匹配详细信息的所有行。我只能通过具有商店和日期密钥的fctSales表加入它们。

我尝试了左外连接以获得所选商店的完整列表,然后右外连接以获得所有日期但从未能同时获得这两个。

dimStores(StoreName) fctSales(StoreName,DateKey) dimDates(日期)

SELECT 
  st.StoreName
 ,sa.SaleItem
 ,dd.DateKey 
From dimStores as st
  Left outer join fctSales as sa on st.StoreName = sa.StoreName
  right outer join dimDates as dd on dd.DateKey = sa.DateKey
WHERE dd.DateKey between 20150101 and 20150115
  and sa.StoreName in ('Aka','Bink','Gil')

请帮忙

1 个答案:

答案 0 :(得分:0)

试一试 左边连接你实际上保留了商店的事实,但是在日期有正确的连接,只考虑那个日期有数据的商店

要保持每个可能日期的所有商店全外连接,以获得所有组合,然后才加入数据。

SELECT 
  st.StoreName
 ,sa.SaleItem
 ,dd.DateKey 
From dimStores as st
full outer join dimDates as dd on 
    1=1
Left outer join fctSales as sa on 
    st.StoreName = sa.StoreName and
    dd.DateKey = sa.DateKey
WHERE 
    dd.DateKey between 20150101 and 20150115 and 
    sa.StoreName in ('Aka','Bink','Gil')
相关问题