代码之家  ›  专栏  ›  技术社区  ›  Marek Jedliński

将行对转置到MS Access数据库中的列的SQL

  •  6
  • Marek Jedliński  · 技术社区  · 16 年前

    我有一个MS Access数据库,其中包含源-目标对中的翻译句子(一个供CAT工具的其他用户使用的翻译内存)。有点恼人的是,源和目标不是存储在单独的列中,而是存储在由ID链接的行中,如下所示:

    +---+----+--------------+
    |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...
    

    性能在这里并不重要,因为我只需要每隔一段时间做一次,DB也不很大(只有几千行)。

    4 回复  |  直到 12 年前
        1
  •  7
  •   Fionnuala    16 年前

    交叉表查询应该适合。

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

    更多信息: http://allenbrowne.com/ser-67.html

        2
  •  2
  •   Milen A. Radev    16 年前

    您需要自行加入:

    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'
    
        3
  •  0
  •   tpdi    16 年前
    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';
    

    其中“table”是这些表中的任何表。

        4
  •  0
  •   VDP    12 年前
    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