2013-08-07 39 views
0

我想在表中创建一个新的列,其内容是基于现有的一对列的值。 具体来说,如果我有表所示(ID是不是主键)如何根据SQL中的列值生成组合? (这是甚至可能吗?)

ID | Value | New Column(The column I want) 
1   A   A:apple 
1   B   A:orange 
2  apple  B:apple 
2  orange  B:orange 

林新手到SQL,所以这里任何见解将是非常有益的。

顺便说一句,我使用Oracle如果重要。

其他详细信息:即时通讯寻求对值:价值观基础上的事实,他们的ID不要匹配

+0

你的问题并不完全似乎与你给表模式。你说你想从一对列中取值,但是你的新列似乎是从两行,而不是两列。你在寻找1:苹果还是A:苹果?如果第一个,查看计算列,如果第二个,请给我详细说明是什么导致一行匹配另一行 – Sethcran

+0

什么是标准加入他们?他们的ID不相等。你可以有A:B或苹果:橙色 – Doon

+0

在问题中增加了信息。谢谢 – KodeSeeker

回答

2

假设你想为ID1所有值配对与ID2的所有值,你可以交叉连接的表本身,但过滤ID:

select t1.value ||':'|| t2.value 
from my_table t1 
cross join my_table t2 
where t1.id = 1 
and t2.id = 2; 

SQL Fiddle

+0

谢谢!跟进:这可以应用于任何数量的行吗?例如,如果有一个id 3.然后'选择t1.value ||':'|| t2.value || ':' || t3.value 从MY_TABLE T1 交叉联接MY_TABLE T2 其中t1.id = 1 和t2.id = 2个 交叉联接MY_TABLE T3 其中t1.id = 1 和t3.id = 3;'这将是对? – KodeSeeker

+1

@KodeSeeker - 是的,有点,但是你不能在交叉连接中加入条件。组合的数量迅速增加。如果你想要所有三组值的所有组合,那么是的,这大致是你如何做的。 [另一个小提琴](http://sqlfiddle.com/#!4/de27c/3)。 –

2

SQL小提琴是here

select t1.value||':'||t2.value 
from mytable t1 
cross join 
mytable t2 
where t1.id = 1 
and t2.id = 2