0

好的,这听起来可能有点奇怪,但我需要做的很简单。我有一份公司名单,每个公司都有描述。该网站有 4 种语言版本。当我用英文列出一家公司时,我的问题就出现了,但负责翻译它的法语的人仍然没有翻译,所以我有一个简单的:

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

真正的查询更复杂,但我认为使用这个查询会更容易理解问题。我需要做的是,当 langid 2 中的描述为空时,请向我显示 langid 1,因为 langid 1 始终是第一个添加的。我不想将描述字段显示为空。

想象一下,第 1 行、第 2 行、第 3 行和第 5 行有 langid 2 的描述,但没有第 4 行和第 6 行。我需要为包含它的行显示 langid 2,但为没有描述的行显示 langid 1。

我知道我可以用 @i 字段递增并在临时表中一个一个地插入结果来做一段时间,但是有没有更好的方法呢?

4

1 回答 1

5

除非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

如果仅缺少部分本地化变体,它也不会用英语/备用版本替换整个地址。只有缺少的部分将被替换。

于 2009-03-30T11:41:30.317 回答