2016-06-10 123 views
1

我正在嘗試使用另外兩個表創建新表。我想在合併「值」列時創建記錄所有記錄組合。我想另一列,告訴我這裏的值從 事情是這樣的。:加入匹配記錄並在不匹配時創建組合

答:

Day Month Random1 Random2 value1 
01  Jan  AA   XX   12  
24  Mar  BB   YY   34  
13  Feb  CC   ZZ   7 

B:

Day Month value2 
03  Jan  16 
24  Mar  2 

我想加入他們的日和月,但是如果沒有行匹配,我希望它創建一個包含所有組合的行。

我希望有一個表,如下所示:

C:

Day Month Random1 Random2 value Type 
01  Jan  AA   XX   12  value1 
24  Mar  BB   YY   34  value1 
13  Feb  CC   ZZ   7  value1 
03  Jan  AA   XX   16  value2 
03  Jan  AA   YY   16  value2 
03  Jan  AA   ZZ   16  value2 
03  Jan  BB   XX   16  value2 
03  Jan  BB   YY   16  value2 
03  Jan  BB   ZZ   16  value2 
03  Jan  CC   XX   16  value2 
03  Jan  CC   YY   16  value2 
03  Jan  CC   ZZ   16  value2 
24  Mar  AA   XX   2  value2 
24  Mar  AA   YY   2  value2 
24  Mar  AA   ZZ   2  value2 
24  Mar  BB   XX   2  value2 
24  Mar  BB   YY   2  value2 
24  Mar  BB   ZZ   2  value2 
24  Mar  CC   XX   2  value2 
24  Mar  CC   YY   2  value2 
24  Mar  CC   ZZ   2  value2 

我的SQL查詢異常複雜,相信有這樣做的一個簡單的方法。 (我實際上是使用sqldf()在R中編寫這個查詢,我在尋找一個sql建議,但是可以選擇開放。)

+0

Random1的值,Random2的唯一值您是否在尋找SQL解決方案或R? – akrun

+0

如果你正在嘗試在sql中做一下游標和記錄。我認爲這可以幫助你。 – Tenzin

+0

@akrun,我正在尋找一個SQL解決方案,因爲我期待它是高效的,但我對R解決方案開放。 – krthkskmr

回答

2

看起來好像結果集包含集合A,加上集合是唯一併設置B.

我會用這個

SELECT Day, Month, Random1, Random2, value1, 'value1' AS type 
FROM tableA 
UNION 
SELECT tableB.Day, tableB.Month, r1.Random1, r1.Random2, tableB.value2, 'value2' 
FROM tableB 
JOIN (SELECT DISTINCT Random1 
     FROM tableA) AS r1 
JOIN (SELECT DISTINCT Random2 
     FROM tableA) AS r2; 
+0

我不得不將列名從'value1'更改爲'value',但工作。謝謝! – krthkskmr