フィールドの内容に応じて、一列のみに選択のためのWHEREを変更
-
22-08-2019 - |
質問
[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
ローカライズされたバリアントの一部のみが欠落している場合は、また、英語/フォールバックバージョンでアドレス全体を置き換えることはありません。足りない部分だけが置換されます。
所属していません StackOverflow