2016-11-25 18 views
1

私はSQLの初心者ですが、小さな問題があります。今、私はすべてのID-Valueは、毎月得たことがしたいSQL:各値のLEFT JOIN

ID Month 
1 Jan 
2 Feb 
2 June 
3 Dec 

、すなわち

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

私はすべての月を含む別のテーブルと使用を作成しようとしました:のは、私はのように見えるテーブルを得たと仮定しましょうコマンド "左結合"のしかし、これはテーブル全体で1ヶ月に1回しか含まれませんが、すべての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のための別のソースを有することができます。

EDIT:

マイケル、あなたが新しい質問をしているときに通常、あなたは別の質問として、それを行う必要があります。この質問には明らかに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

私はあなたのコードを使用することができましたが、問題が1つありました。私のテーブルには3番目の列があります(結果を言っています)。新しいテーブルにどのように含めることができますか? 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