2009-04-10 74 views
4

我有一個MS Access數據庫,其中包含源 - 目標對中的翻譯句子(用於CAT工具的其他用戶的翻譯記憶庫)。有些煩人,源和目標並不存儲在單獨的列,但在通過ID鏈接行,像這樣:SQL將行對轉換爲MS ACCESS數據庫中的列

+---+----+--------------+ 
|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不是很大(只有幾千行)。

回答

2

你需要一個自聯接:

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

在訪問這將產生具有正確列的表,但兩者lang_a而lang_b列包含相同的語言文本(lang_a)。它只顯示兩次相同的每個記錄的lang_a。我意識到這違反了WHERE條件,但這是我得到的。 (續) – 2009-04-10 15:44:57

+0

(續)將t1.lang和t2.lang添加到select將顯示正確的語言ID。我經歷了這幾次,但一直沒能弄清楚這個問題。 – 2009-04-10 15:46:28

0
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'; 

其中「表」是什麼表,這些都是

0
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 
相關問題