SQL:每个值​​

时间:2016-11-25 15:16:01

标签: sql left-join

我是SQL的初学者并遇到了一个小问题。我们假设我有一张表格如下:

 ID Month
 1   Jan
 2   Feb
 2   June
 3   Dec

现在我希望每个月都能获得每个ID值,即

ID Month
1  Jan
1  Feb
.  .
.
.
2 Jan
2 Feb
.
.
and so on.

我尝试创建另一个表,包括所有月份和使用命令“Left Join”。但这仅包括整个表格的所有月份,而不是单独的每个ID。

我试过了:

 Create Table merged as 
   select ID, Month 
   from Data 
   Left outer join months On data.month=months.month;

2 个答案:

答案 0 :(得分:2)

您通常会使用cross join执行此操作。如果所有月份都在表格中,那么您可以这样做:

select i.id, m.month
from (select distinct id from t) i cross join
     (select distinct month from t) m;

您可能有idmonth列表的其他来源。

编辑:

迈克尔,通常当你提出新的问题时,你应该把它作为另一个问题。这个问题显然没有outcome列;改变这个问题会使这个答案无效,从而引起投票 - 所以这很粗鲁。

但是,这是对查询的一个简单更改:

select i.id, m.month, t.outcome
from (select distinct id from t) i cross join
     (select distinct month from t) m left join
     t
     on t.id = i.id and t.month = m.month;

答案 1 :(得分:0)

SELECT T1.ID,A._Month FROM #Table T1 CROSS JOIN (SELECT ID,_Month FROM #Table) A ORDER BY ID