【问题标题】:Populate dates for each outlet填充每个出口的日期
【发布时间】:2013-07-08 15:28:28
【问题描述】:

来自链接 Easiest way to populate a temp table with dates between and including 2 date parameters

我生成了一个表格

Date
2012-01-01
2012-01-02
..
2012-01-31

我想问一下如何和我的插座表结合?

假设我有一个插座表

ID | Name
1  | Outlet A
2  | Outlet B
3  | Outlet C

我想将生成的日期表和出口表结合起来,如下所示,所以每个日期都有所有的出口

Date       | Outlet
2012-01-01 | Outlet A
2012-01-01 | Outlet B
2012-01-01 | Outlet C
2012-01-02 | Outlet A
2012-01-02 | Outlet B
2012-01-02 | Outlet C
...
2012-01-31 | Outlet A
2012-01-31 | Outlet B
2012-01-31 | Outlet C

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你可以使用CROSS JOIN:

    SELECT d.Date, o.Outlet
    FROM DatesTable d
    CROSS JOIN OutletsTable o
    

    【讨论】:

    • 太棒了!这也有正确的结果。和下面的其他答案有什么区别吗?
    • @Akhtar 这是语法差异。性能和结果是一样的。使用 CROSS JOIN 是 SQL-92 标准,而另一个答案是使用旧式连接 - SQL-89 语法。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…
    【解决方案2】:

    你可以通过简单的查询来做到这一点:

    select a.date , b.Name
    from dates as a , outlets as b
    

    它会返回你想要的结果。此查询将返回 from 子句中的表的笛卡尔积。查看article了解更多详情。

    【讨论】:

    • 谢谢,很简单,为什么我从来没想过。
    猜你喜欢
    • 2018-02-12
    • 2017-08-13
    • 2021-11-06
    • 2015-10-09
    • 2017-09-20
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多