2016-06-10 120 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