2017-07-16 68 views
0

我确实尝试过搜索这个,但不知道如何正确表达它,所以我希望这里有人能够提供帮助。SQL Server:结合日期范围和产品代码列表

我有两个表,产品和日期范围。

CREATE TABLE product 
(
    Code varchar(50) NOT NULL, 
    Price money 
); 

CREATE TABLE daterange 
(
    yyyymm varchar(6) NOT NULL 
); 

INSERT INTO product (Code, Price) 
VALUES ('10001J',3.68), ('10002K',7.23), ('10003L',4.72); 

INSERT INTO daterange (yyyymm) 
VALUES (201507),(201508),(201509),(201510); 

我想要制作的列表是这样的:

YYYYMM Product 
--------------- 
201507 10001J 
201507 10002K 
201507 10003L 
201508 10001J 
201508 10002K 
201508 10003L 
201509 10001J 
201509 10002K 
201509 10003L 
201510 10001J 
201510 10002K 
201510 10003L 

基本上,创造的所有产品和所有日期的组合。我不知道我是否需要日期范围表,或者是否可以单独使用代码。是的,我可以用Excel或其他方式创建组合,但是我希望将它组合成更大的动态查询。

在此先感谢:)

+0

'CROSS JOIN'如何? –

+0

现在我觉得自己像个白痴。谢谢Felix。还没有遇到过这样的一个:) –

+0

'我不知道我是否甚至需要日期范围表'对于这一点,日期表是不是一件坏事现有的国际海事组织(尽管有实际日期,而不是varchars - 很容易在稍后的时间将它们转换为您的需求)。然后,您可以从该表中选择所需的任何日期范围,而无需每次都创建它。与数字表相同。 – ZLK

回答

0

感谢Felix指出我之前没有真正使用过的连接。

SELECT yyyymm, code FROM product CROSS JOIN daterange 

发挥了魅力。

+0

其实,你以前曾使用过这种方法。你也可以使用没有'ON'子句的'INNER JOIN'(尝试它)。 –

+0

@TimBiegeleisen内部连接总是需要一个on子句。只是on子句可以是'ON 1 = 1'或其他东西。 – ZLK

+0

@ZLK在MySQL中,没有on子句的内部连接是允许的,并且与交叉连接相同。显然不在TSQL中。 –