SQL для транспонирования пар строк в столбцы в базе данных MS ACCESS - PullRequest
6 голосов
/ 10 апреля 2009

У меня есть база данных MS Access, которая содержит переведенные предложения в парах источник-цель (память переводов для других пользователей инструментов CAT). Несколько досадно, что источник и цель хранятся не в отдельных столбцах, а в строках, связанных по идентификатору, например:

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

Какой SQL я мог бы использовать, чтобы превратить его в таблицу, такую ​​как:

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

Производительность здесь не имеет значения, поскольку мне нужно было бы делать это только время от времени, а БД не огромна (всего несколько тысяч строк).

Ответы [ 4 ]

7 голосов
/ 10 апреля 2009

Подходит кросс-таблица.

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

Дополнительная информация: http://allenbrowne.com/ser-67.html

2 голосов
/ 10 апреля 2009

Вам необходимо самостоятельное присоединение:

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'
0 голосов
/ 10 августа 2010
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
0 голосов
/ 10 апреля 2009
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';

где "таблица" - это таблица, в которой они находятся.

...