SQL para transponer pares de filas de columnas en la base de datos MS Access
Pregunta
Tengo una base de datos MS Access que contiene frases traducidas en pares de origen y destino (una memoria de traducción para otros usuarios de herramientas CAT). Algo molesto, origen y de destino no se almacenan en columnas separadas, pero en filas unidas por ID, como este:
+---+----+--------------+
|id |lang| text |
+---+----+--------------+
1 a lang a text
1 b lang b text
2 a more a text...
2 b more b text...
+---+----+--------------+
¿Qué SQL podría usar para convertir eso en una tabla como:
+---+--------------+--------------+
|id | lang A | lang B |
+---+--------------+--------------+
1 lang a text lang b text
2 more a text... more b text...
El rendimiento no tiene importancia aquí, ya que habría que sólo necesita hacer esto una vez en un tiempo, y el PP no es enorme (sólo unos pocos miles de filas).
Solución
Una consulta de referencias cruzadas debe adaptarse.
TRANSFORM First([Text]) AS LangText
SELECT ID, First([Text])
FROM Table
GROUP BY ID
PIVOT lang
Para más información: http://allenbrowne.com/ser-67.html
Otros consejos
Se necesita una autocombinación:
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';
donde "mesa" es cualquier mesa que éstos se encuentran.
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