好吧,这听起来可能有点不可思议,但我需要做的就是简单。我公司的名单,每一个都有说明。该网站是在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场递增并插入一个在一个临时表中的结果之一,同时,但有这样做的没有更好的办法?

有帮助吗?

解决方案

此将工作,除非有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