Pregunta

Ok, esto puede sonar un poco raro, pero lo que tengo que hacer es simple. Tengo una lista de empresas y cada uno tiene una descripción. El sitio está en 4 idiomas. Mi problema viene cuando he enumerado una empresa en Inglés, pero la persona que se encarga de traducirlo en francés todavía no hizo la traducción, así que tengo un simple:

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

La consulta real es más complejo, pero creo que será más fácil con éste para entender el problema. Lo que tengo que hacer es, cuando la descripción está vacío en langid 2 luego me la langid 1 muestran como langid 1 siempre es el primero que se añadirá. No quiero para mostrar el campo de descripción vacía.

Imagínese fila 1, fila 2, fila 3 y la fila 5 tienen una descripción para langid 2 pero no la fila 4 y la fila 6. I necesidad de mostrar langid 2 para las filas que contienen, pero LANGID 1 para las filas con hay descripción.

Sé que probablemente podría hacer un tiempo con un campo @i incrementando e insertar el resultado de una en una en una tabla temporal, pero ¿hay alguna forma mejor de hacerlo?

¿Fue útil?

Solución

Esto funcionará a menos que haya lng1.name etc (es decir, el idioma Inglés / variante de retorno) que faltan.

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

Será tampoco sustituir toda la dirección con la versión Inglés / alternativa en caso de sólo una parte de la variante localizada no se encuentra. serán sustituidos Solamente las partes que faltan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top