تغيير WHERE لاختيار على صف واحد فقط اعتمادا على محتوى الحقل

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

سؤال

وطيب، وهذا قد يبدو غريبا بعض الشيء، ولكن ما عليك القيام به هو بسيط. لدي قائمة من الشركات وكل واحد له وصفا. الموقع في 4 لغات. مشكلتي عندما يأتي ولقد أدرجت الشركة في اللغة الإنجليزية ولكن الشخص الذي هو المسؤول عن ترجمتها باللغة الفرنسية ما زالت لم يجعل الترجمة، لذلك ليس لدي بسيط:

SELECT TOP(6)
    company.name,
    company.description,
    company.address
WHERE
    langid=1
ORDER BY
    company.id DESC

والاستعلام الحقيقي هو أكثر تعقيدا، ولكن أعتقد أنه سيكون من الأسهل مع هذا واحد لفهم المشكلة. ما عليك القيام به هو، عندما وصف فارغ في LANGID 2 ثم تبين لي LANGID 1 كما LANGID 1 هو دائما أول واحد التي ستضاف. أنا لا أريد أن تظهر حقل الوصف فارغة.

وتخيل الصف 1، الصف 2، 3 الصف والصف 5 وصفا لLANGID 2 ولكن ليس صف 4 والصف 6. ولست بحاجة لإظهار LANGID 2 للصفوف التي تحتوي على ذلك، ولكن LANGID 1 للصفوف مع أي وصف.

وأنا أعلم أنني ربما يمكن أن تفعل فترة من الوقت مع تزايد حقلi وإدراج نتائج واحدا تلو الآخر في جدول مؤقت، ولكن هل هناك أي طريقة أفضل للقيام بذلك؟

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

المحلول

وهذا سيعمل ما لم يكن هناك lng1.name الخ (أي اللغة الإنجليزية / البديل الإجراء الاحتياطي) في عداد المفقودين.

SELECT TOP(6) 
  COALESCE(lng2.name, lng1.name)               [name], 
  COALESCE(lng2.description, lng1.description) description, 
  COALESCE(lng2.address , lng1.address )       address
FROM 
  company lng1
  LEFT JOIN company lng2 ON 
    lng1.id     = lng2.id AND
    lng1.langid = 1 AND
    lng2.langid = 2  /* your "foreign language" id, e.g. a parameter */
WHERE
  lng1.id IN (1,2,3,4,5,6)  /* or whatever */
ORDER BY 
  lng1.id DESC

وكذلك لن يحل محل العنوان بالكامل مع اللغة الإنجليزية / نسخة تراجع اذا سوى جزء من البديل المترجمة مفقود. سوف يتم استبدال فقط الأجزاء المفقودة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top