Question

J'ai une base de données MS Access qui contient des phrases traduites par paires source-cible (une mémoire de traduction pour d'autres utilisateurs d'outils de CAT). source et cible un peu agaçant, ne sont pas stockées dans des colonnes séparées, mais en lignes reliées par ID, comme ceci:

+---+----+--------------+
|id |lang|    text      |
+---+----+--------------+
  1   a     lang a text
  1   b     lang b text 
  2   a     more a text...
  2   b     more b text...
+---+----+--------------+

Qu'est-ce que SQL pourrais-je utiliser pour le transformer en un tableau tel que:

+---+--------------+--------------+
|id | lang A       | lang B       |
+---+--------------+--------------+
 1   lang a text    lang b text
 2   more a text... more b text...

Performance n'a pas d'importance ici, depuis que je seulement besoin de faire de temps en temps, et le db est pas énorme (seulement quelques milliers de lignes).

Était-ce utile?

La solution

Une requête de tableau croisé devrait convenir.

TRANSFORM First([Text]) AS LangText
SELECT ID, First([Text])
FROM Table 
GROUP BY ID
PIVOT lang

Pour plus d'informations: http://allenbrowne.com/ser-67.html

Autres conseils

Vous avez besoin d'une auto-jointure:

SELECT
    t1.id, t1.text AS lang_a, t2.text AS lang_b
FROM
    lang_table AS t1
INNER JOIN
    lang_table AS t2
ON
    (t1.id = t2.id)
WHERE
    t1.lang = 'a'
AND
    t2.lang = 'b'
select a.id, a.text as 'lang A', b.text as 'lang B'
from table a join table b on (a.id = b.id)
where a.lang = 'a' and b.lang = 'b';

où "table" est tout ce tableau sont.

SELECT a.id,
MAX(CASE WHEN a.lang LIKE 'a' THEN a.text) AS Lang A,
MAX(CASE WHEN a.lang LIKE 'a' THEN a.text) AS Lang A
FROM table a
GROUP BY a.id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top