2017-08-11 52 views
1
select a.code, b.translationName 
from Funds a 
inner join Translations b ON a.code = b.code 
where a.code= 'xyz123' 

该查询返回两列,两列如下结果:T-SQL转换内部连接表中的行为

code   translationName 
--------------------------------------- 
xyz123  'Fund's chineseName' 
xyz123  'Fund's JapaneseName' 

有没有办法返回结果为

code   translatonName1   translationName2 
xyz123  'Fund's chineseName' 'Fund's JapaneseName' 

顺便说一句,有一列languageIdTranslations表。

+0

你的代码适合我,你确定这两个代码是一样的吗?也许试试LTRIM(RTRIM(a.code))= LTRIM(RTRIM(b.code)) –

+0

您还需要在select语句中指定两个translationName字段,而不仅仅是其中的一个。 –

+0

那么你的查询工作,然后,如果它显示在2行,那么代码必须以某种方式不同。 –

回答

2

如果在翻译表标识语言(诸如ISO 6339-1 code)的柱,然后就可以使用的情况下的表达式为“枢轴”的行RO列

select 
     a.code 
    , max(case when b.lang = 'zh' then b.translationName end) as ChineseName 
    , max(case when b.lang = 'ja' then b.translationName end) as JapaneseName 
from Funds a 
inner join Translations b ON a.code = b.code 
where a.code= 'xyz123' 
group by 
     a.code 

如果没有语言标识符然后我不明白你会如何明智地对齐额外的列。

+0

您可能还希望在where子句中添加一个条件:**和b.lang('ja','zh')** –

+0

I遵循你使用的逻辑,它的工作,'和b.lang in('ja','zh')'在我的情况下并不是非常必要 – Yan