【问题标题】:Cartesian product between items list and date range项目列表和日期范围之间的笛卡尔积
【发布时间】:2014-06-05 14:39:05
【问题描述】:

有了项目列表和日期范围,我需要一个表格,其中包含日期之间所有日期的所有项目。我想我应该使用交叉连接,但我不知道如何获得范围内的日期。样本数据:

Item  
123456
546578
644821

开始日期:2014-06-01 结束日期:2014-06-03

我需要这个结果:

Date         Item
2014-06-01   123456
2014-06-01   546578
2014-06-01   644821
2014-06-02   123456
2014-06-02   546578
2014-06-02   644821
2014-06-03   123456
2014-06-03   546578
2014-06-03   644821

谁能给我一些帮助? (在 MS SQL Server 中)

【问题讨论】:

  • 你试过用谷歌搜索“SQL Server笛卡尔积”吗?第一个结果正是您所需要的。
  • 可能我的结果不是你的结果。这是我做的第一件事。但是,无论如何,谢谢你 - 我会更加努力......
  • 请参阅stackoverflow.com/questions/1378593/… 了解开始。

标签: sql sql-server join outer-join


【解决方案1】:

你可以这样做:

DECLARE @items TABLE (item INT)
INSERT INTO @items
        ( item )
VALUES  ( 123456  ),(546578),(644821)

DECLARE @startdate DATETIME = '2014-06-01'
DECLARE @enddate DATETIME = '2014-06-03'

;WITH mycte AS
(
  SELECT @startdate DateValue
  UNION ALL
  SELECT  DateValue + 1
  FROM    mycte   
  WHERE   DateValue + 1 <= @enddate
)

SELECT  DateValue, item
FROM    mycte
CROSS JOIN @items
OPTION (MAXRECURSION 0)

参考 - 使用 Dan Atkinson 的帖子 here

【讨论】:

  • 谢谢@Dave,这就是我所需要的!
猜你喜欢
  • 2020-12-21
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2017-07-15
  • 2012-01-03
  • 2021-10-22
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多