两列而不是两行的语言

时间:2020-08-12 06:17:14

标签: sql sql-server

我有一个查询,该查询从我的表中选择语言为西班牙语或法语且其中有一些值的所有行,如下所示:

值1,值2,LanugageSpecificValue,语言

这些值例如:

第1行:xxx,xxx,hola,西班牙语

第2行:xxx,xxx,bonjour,法语

对于每行,我得到2个结果,其中LanguageSpecificValue旁边的值相同,只有语言是法语或西班牙语。

现在,我要获得两列而不是两行:

值1,值2,FrenchLanguageSpecificValue,西班牙语LanguageSpecificValue

第1行:xxx,xxx,bonjour,hola

有人可以帮助我实现这一目标吗?预先谢谢你!

3 个答案:

答案 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)

如果我理解正确,则value1value2标识每一行。一种方法是聚合:

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;
相关问题