如何基于SQL查询的几个条件SELECT和Concat()列值?

时间:2015-10-22 23:53:02

标签: mysql sql db2 concat jointable

新手来到SQL。所以我有两个表,让我们以下面的两个表为例。

表A

set_num   s_id   s_val
100        3      AA 
100        5      BB
200        3      AA
200        9      CC

表B

s_id    s_val    phrase        seq 
1        DD      'hi'         'first'
3        AA      'hello'      'first'
6        EE      'goodnight'  'first'
5        BB      'world'      'second'
9        CC      'there'      'second'
4        FF      'bye'        'first'

我想将表A与表B连接在两列上,比如复合键(s_id,s_val),我想要返回 表A中的 set_num 和表B中的短语串联(我们称之为 whole_phrase ,concat(...)AS whole_phrase)。 连接也应遵循要连接短语的顺序。对于每个短语,这将由表B中的seq列确定。 “第一个”将表明这个短语需要先来,“第二个”,接下来是好的。我想用SELECT查询来做这个,但不确定这是否可能,如果没有它变得复杂。我可以在SELECT中执行此操作,还是要求其他方法?

预期产出:

set_num    entire_phrase
100        'hello world'
200        'hello there'

而不是

set_num    entire_phrase
100        'world hello'
200        'there hello'

非常感谢任何帮助/方法!

1 个答案:

答案 0 :(得分:1)

你可以这样做:

select temp1.set_num, concat(phrase1,' ',phrase2) as entire_phrase
from (
(
select set_num, b.phrase as phrase1
from TableA as A
join TableB as B
on a.s_id = b.s_id 
and a.s_val = b.s_val 
and b.seq = 'first'
) as temp1
join 
(
select set_num, b.phrase as phrase2 
from TableA as A
join TableB as B
on a.s_id = b.s_id 
and a.s_val = b.s_val 
and b.seq = 'second' 
) as temp2
on temp1.set_num = temp2.set_num
) 

在此处运行:http://sqlfiddle.com/#!9/d63ac3/1