質問

[OK]を、これは少し奇妙に聞こえるかもしれませんが、私は何をする必要があるのは簡単であることがあります。私は企業のリストを持っており、それぞれが記述されています。このサイトは4つの言語です。私は英語で会社をリストしたとき、私の問題は来るが、フランス語で翻訳を担当している人は、まだ翻訳をしなかったので、私はシンプルを持っています:

SELECT TOP(6)
    company.name,
    company.description,
    company.address
WHERE
    langid=1
ORDER BY
    company.id DESC

実際のクエリは、より複雑ですが、私は問題を理解するために、この1と容易になりますと思います。私は何をする必要があることは説明がLANGID 1が常に追加される最初の1であるようLANGID 1を見せ、その後LANGID 2で空になったときに、あります。私は、空の説明フィールドを表示したくない。

行1、行2、行3、列5はLANGID 2の説明を持っているが、4行及び列6は、私はそれを含む行に対してLANGID 2を表示する必要があるがない説明と行に対して1 LANGIDない想像。

私は、私はおそらく一時テーブル内の1つのことで@iフィールドの結果をインクリメントし、挿入するものとしながら操作を行うことができることを知っているが、それを行うための任意のより良い方法はありますか?

役に立ちましたか?

解決

ない限り、

これは動作しますlng1.nameなど(すなわち英語/フォールバックバリアント)が欠落しています。

SELECT TOP(6) 
  COALESCE(lng2.name, lng1.name)               [name], 
  COALESCE(lng2.description, lng1.description) description, 
  COALESCE(lng2.address , lng1.address )       address
FROM 
  company lng1
  LEFT JOIN company lng2 ON 
    lng1.id     = lng2.id AND
    lng1.langid = 1 AND
    lng2.langid = 2  /* your "foreign language" id, e.g. a parameter */
WHERE
  lng1.id IN (1,2,3,4,5,6)  /* or whatever */
ORDER BY 
  lng1.id DESC
ローカライズされたバリアントの一部のみが欠落している場合は、

また、英語/フォールバックバージョンでアドレス全体を置き換えることはありません。足りない部分だけが置換されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top