2016-11-25 1 views
1

저는 SQL을 처음 접하는 분으로서 작은 문제가 있습니다. 나는 모든 개월 사용을 포함하여 다른 테이블을 만들려고 즉SQL : 각 값에 대해 LEFT JOIN

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

,

ID Month 
1 Jan 
2 Feb 
2 June 
3 Dec 

가 지금은 모든 ID-값이 매달 가지고 있음을 갖고 싶어 :이 전처럼 보이는 테이블을 가지고 가정하자 명령 "왼쪽 결합". 그러나 이것은 전체 테이블에 대해 한 달에 한 번만 포함되지만 모든 ID마다 별도로 포함되지는 않습니다.

내가 시도 :

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

사용중인 데이터베이스 질문에 태그를하시기 바랍니다 :

는하지만,이 쿼리에 쉽게 변화이다. –

+0

그리고 귀하의 질의 시도를 보여주십시오. – jarlh

+0

답변 해 주셔서 감사합니다. 그것이 바보 같은 질문이라면 미안하지만 그 질문은 무엇을 의미합니까? – Michael

답변

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; 
+0

고맙습니다. 코드를 설명해 주시겠습니까? :-) – Michael

+0

또는 모든 달에 추가 표를 사용하면 어떻게됩니까? – Michael

+0

코드를 사용할 수 있었지만 한 가지 문제가있었습니다. 테이블에 세 번째 열 (결과를 말함)이 있습니다. 새 테이블에 어떻게 포함시킬 수 있습니까? select id, month, outcome ...을 작성함으로써 오류가 발생했습니다. – Michael

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

이것은 유효한 대답 일지 모르지만 코드가하는 일과 작동 방식을 설명함으로써 다른 사람들을 도울 가능성이 훨씬 큽니다. 코드 전용 답변은 긍정적 인 관심을 덜받는 경향이 있으며 다른 대답만큼 유용하지는 않습니다. – Aurora0001