我有一个查询,该查询从我的表中选择语言为西班牙语或法语且其中有一些值的所有行,如下所示:
列:值1,值2,LanugageSpecificValue,语言
这些值例如:
第1行:xxx,xxx,hola,西班牙语
第2行:xxx,xxx,bonjour,法语
对于每行,我得到2个结果,其中LanguageSpecificValue旁边的值相同,只有语言是法语或西班牙语。
现在,我要获得两列而不是两行:
列:值1,值2,FrenchLanguageSpecificValue,西班牙语LanguageSpecificValue
第1行:xxx,xxx,bonjour,hola
有人可以帮助我实现这一目标吗?预先谢谢你!
答案 0 :(得分:0)
那么每个句子都需要一个键,以便可以链接它们,在这种情况下,我假设value1是这样的键。然后,您必须使用一种包含所有短语的语言(我建议使用英语让大多数人理解,但在此我使用西班牙语)。然后将这些值连接在一起。
select ts.LanugageSpecificValue,
ts.Language,
tf.LanugageSpecificValue,
tf.Language
from table ts
left join table tf
on ts.value1 = tf.value1
and tf.language = 'french'
where ts.langage = 'spanish'
答案 1 :(得分:0)
另一种方法是使用PIVOT
(因为您没有提到我以test
作为表名)
SELECT value1, value2, french, spanish
FROM
(
SELECT value1, value2, word, language
FROM test
) as a
PIVOT (
max(word) FOR language in (french, spanish)
) as piv
看到它在这里工作:http://sqlfiddle.com/#!18/59996/34
答案 2 :(得分:0)
如果我理解正确,则value1
和value2
标识每一行。一种方法是聚合:
select value1, value2,
max(case when language = 'spanish' then LanugageSpecificValue end) as in_spanish,
max(case when language = 'french' then LanugageSpecificValue end) as in_french
from t
where language in ('french', 'spanish')
group by value1, value2;