如何从具有部分依赖性的多个表中进行选择?

时间:2014-10-17 07:10:59

标签: select sql-server-2008-r2 partial

我的SQL Server 2008中有两个表。一个是项目列表,另一个是项目流,如下所示:

项目表:

item_id   item_name
--------------------
      1       item1
      2       item2
      3       item3

和流程表:

date        item_id   qty
-------------------------
2014-10-15        1     5
2014-10-15        2     3
2014-10-16        1     7
2014-10-17        1     4
2014-10-17        2     2
2014-10-17        3     1

如何在项目表中选择每个数据而流表中没有记录,这样我就可以得到如下结果:

date        item   qty
-----------------------
2014-10-15  item1    5
2014-10-15  item2    3
2014-10-15  item3    0
2014-10-16  item1    7
2014-10-16  item2    0
2014-10-16  item3    0
2014-10-17  item1    4
2014-10-17  item2    2
2014-10-17  item3    1

1 个答案:

答案 0 :(得分:0)

您可能正在寻找cross joinleft join

的组合
SELECT dt.date, item.item_name, ISNULL(flow.qty,0)
FROM item CROSS JOIN (SELECT DISTINCT date from flow) dt
LEFT JOIN flow on item.item_id=flow.item_id and dt.date=flow.date
ORDER BY dt.date, item.item_name

这个解决方案可能有一个更优雅的选择,也许你可能会在以后找到它。 =)