Jointure et choix de valeurs par defaut (pour traduction)

Jointure et choix de valeurs par defaut (pour traduction) - SQL/NoSQL - Programmation

Marsh Posté le 18-01-2011 à 11:07:29    

Bonjour à tous
 
J'ai un petit soucis de requétage, je n'arrive pas à trouver la logique pour effectuer le traitement suivant :
 
TABLE_A
--------
idA
 
TABLE_B
--------
idA
idLanguage
Text
 
En gros je dispose d'une table de référence et d'une table de traduction de son contenu.
 
On me demande de faire ceci :
 
TABLE_A
--------
1
2
3
 
TABLE_B
--------
1  1  bonjour
1  2  Hello
1  3  Gutten Tag
2  1  Aurevoir
2  2  Bye
 
 
Je souhaite récupérer pour une langue donnée (imaginons l'Allemand) toutes les valeurs de traduction, et si une valeur n'a pas de traduction en Allemand, alors récupérer à la place la traduction Anglaise
 
Donc avoir comme résultat pour l'Allemand :
 
RESULTAT
------------
1 GuttenTag
2 Bye
 
Pour le Francais :
 
RESULTAT
------------
1 Bonjour
2 Aurevoir
 
Je ne demande pas spécialement le code mais une piste pour la logique :)
 
Merci d'avance :jap:


Message édité par massanu le 18-01-2011 à 11:07:58

---------------
Oui je sais, je suis une merde en orthographe et alors ? Altcoin list: https://docs.google.com/spreadsheet [...] =286417424
Reply

Marsh Posté le 18-01-2011 à 11:07:29   

Reply

Marsh Posté le 18-01-2011 à 11:19:47    

y'a un problème dans ton énoncé... la logique voudrait qu'on ait 3 tables :
1 table pour les langues,
1 table pour les libellés à traduire  
1 table pour les traductions dispos...
 
La je vois pas l'utilité de la tableA...


---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 18-01-2011 à 11:24:40    

Oui bon j'ai simplifié le problème pour poser la question, mais dans la table A il y'a un paquet de colonnes pour filtrer les enregistrements. :)


---------------
Oui je sais, je suis une merde en orthographe et alors ? Altcoin list: https://docs.google.com/spreadsheet [...] =286417424
Reply

Marsh Posté le 18-01-2011 à 11:33:14    

Code :
  1. SELECT a.idA, ISNULL(b.Text,c.Text) [Text]
  2. FROM @Table_A a
  3.     LEFT JOIN @Table_B b ON a.idA = b.idA AND b.idLanguage = 3
  4.     LEFT JOIN @Table_B c ON a.idA = c.idA AND c.idLanguage = 2
  5. WHERE b.idA IS NOT NULL
  6.     OR c.idA IS NOT NULL


 
Il y a aussi moyen de faire avec un seul Join, mais c'est un peu capilotracté et spécifique a SQL Server.

Reply

Marsh Posté le 18-01-2011 à 11:40:17    

Tout compte fait c'est pas si capilotracté que ca et pas spécialement spécifique a SQL Server :)

Code :
  1. SELECT a.idA, ISNULL(b.PrimaryLanguage,b.SecondaryLanguage) [Text]
  2. FROM @Table_A a
  3.     JOIN (
  4.     SELECT idA,
  5.         max(CASE WHEN idLanguage = 3 THEN Text End) PrimaryLanguage,
  6.         max(CASE WHEN idLanguage = 2 THEN Text End) SecondaryLanguage
  7.     FROM @Table_B
  8.     WHERE idLanguage IN (3,2)
  9.     GROUP BY idA
  10.     ) b ON b.idA = a.idA

Reply

Marsh Posté le 18-01-2011 à 11:48:47    

Je test ca et je te donne mon retour :jap:


---------------
Oui je sais, je suis une merde en orthographe et alors ? Altcoin list: https://docs.google.com/spreadsheet [...] =286417424
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed