SQL لنقل أزواج الصفوف إلى الأعمدة في قاعدة بيانات MS ACCESS

StackOverflow https://stackoverflow.com/questions/736317

  •  09-09-2019
  •  | 
  •  

سؤال

لدي قاعدة بيانات 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...

الأداء لا يهم هنا، لأنني سأحتاج فقط إلى القيام بذلك مرة واحدة كل فترة، وقاعدة البيانات ليست ضخمة (فقط بضعة آلاف من الصفوف).

هل كانت مفيدة؟

المحلول

يجب أن يناسب الاستعلام الجدولي.

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

مزيد من المعلومات: http://allenbrowne.com/ser-67.html

نصائح أخرى

أنت بحاجة إلى الانضمام الذاتي:

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

حيث "الجدول" هو أي جدول موجود فيه.

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top