2009-04-10 12 views
4

私は、ソース - ターゲットペア(CATツールの同僚のユーザーのための翻訳メモリ)に翻訳されたセンテンスを含むMS Accessデータベースを持っています。ややうるさく、ソースとターゲットは、このように、別々の列に格納されているが、IDによってリンクされた行でされていません。SQLがMS ACCESSデータベースの列に転記するSQL

+---+----+--------------+ 
|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は巨大ではありません(わずか数千行だけです)。

答えて

6

クロス集計クエリが適合すべきです。

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

さらなる情報:Accessで、 "テーブル" は、これらがである何台あるhttp://allenbrowne.com/ser-67.html

+0

ありがとう、私はトランスフォームについて知らなかった。それは私が必要とする結果を正確に生成します。アクセスは、言語(ソース)と同じ内容の "Expr1003"という名前の列を追加するようですが、無視することができます。 –

+0

次のようにSELECT行を変更することができます。SELECT ID – Fionnuala

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を2回だけ表示します。私はこれがWHERE条件に違反していることを認識していますが、これは私が得ているものです。 (続き) –

+0

(続き)selectにt1.langとt2.langを追加すると、正しい言語IDが表示されます。私はこれを何度も繰り返しましたが、問題を理解することができませんでした。 –

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 
関連する問題