我是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;
答案 0 :(得分:2)
您通常会使用cross join
执行此操作。如果所有月份都在表格中,那么您可以这样做:
select i.id, m.month
from (select distinct id from t) i cross join
(select distinct month from t) m;
您可能有id
和month
列表的其他来源。
编辑:
迈克尔,通常当你提出新的问题时,你应该把它作为另一个问题。这个问题显然没有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