Frage

Ok, das mag ein wenig seltsam klingen, aber was muss ich tun ist einfach. Ich habe eine Liste von Unternehmen und jeder hat eine Beschreibung. Die Seite ist in 4 Sprachen. Mein Problem kommt, wenn ich ein Unternehmen in englischer Sprache aufgeführt haben, aber die Person, die verantwortlich ist davon in Französisch übersetzen immer noch nicht die Übersetzung gemacht hat, so habe ich eine einfache:

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

Die eigentliche Abfrage ist komplexer, aber ich denke, es wird mit diesem ein leichter sein, das Problem zu verstehen. Was ich tun muß, ist, wenn die Beschreibung in langid 2 zeigt mir leer ist, dann der langid 1 als langid 1 immer der ersten ist, die hinzugefügt werden. Ich will nicht das Beschreibungsfeld leer zeigen.

Stellen Sie sich vor Zeile 1, Zeile 2, Zeile 3 und Zeile 5 eine Beschreibung für langid 2, aber nicht Zeile 4 und Zeile 6. Ich brauche langid 2 für die Zeilen zu zeigen, enthält es aber langid 1 für die Zeilen ohne Beschreibung.

Ich weiß, dass ich wohl noch eine Weile mit einem @i Feld Erhöhen und Einführen der Ergebnisse einer nach dem anderen in eine temporäre Tabelle tun könnte, aber gibt es einen besseren Weg, es zu tun?

War es hilfreich?

Lösung

Das wird funktionieren, es sei denn, es ist lng1.name usw. (das heißt die englische Sprache / Ausweichvariante) fehlt.

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

Es wird auch die gesamte Adresse mit der englischen / Ausweich Version nicht ersetzen, wenn nur ein Teil der lokalisierten Variante fehlt. Es werden nur die fehlenden Teile ersetzt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top