SQL pour transposer les paires de lignes de colonnes de base de données MS ACCESS
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).
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