سؤال

لنفترض أن علاقتي مثل ذلك

enter image description here

وأردت الفرز حسب الرتبة ، لكن أ و ب أولا.لذلك سوف تبدو علاقتي مثل

enter image description here

في البداية حاولت أن يكون مجرد اثنين من العلاقات, حيث أطلب كل منهما حسب الرتبة, ثم الاتحاد العلاقات اثنين, لكنها فقط في نهاية المطاف الحصول على مختلطة معا.لقد حاولت أيضا استخدام الحالات ، لكنني لا أفهم كيف يعمل.ظللت الحصول على أخطاء حول خلط الأحرف مع الأعداد الصحيحة.

تحرير:نسيت أن أذكر أن العلاقة الأولى أعلاه هي ما ينتهي بي الأمر بعد عدد معقد إلى حد ما من المشاهدات.على سبيل المثال ، أنا خلقت اثنين من وجهات النظر ، واحد الذي لديه فقط و ب الطبقات ، ثم أمرت ذلك حسب الرتبة.العرض الثاني فقط فئات ج, أمر ذلك حسب الرتبة.ثم أنا نقابي لهم, لكنها مجرد الحصول على مختلطة.

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

المحلول

تحتاج فقط إلى CASE التعبير في ORDER BY, ، لتقسيم الصفوف إلى مجموعتين ، لذلك يتم وضع الصفوف مع الفئة 'أ' أو 'ب' في المجموعة الأولى (1) وجميع الآخرين في الثانية (2):

ORDER BY 
    CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
    rank ;

نصائح أخرى

أنا ذاهب لأعطيك مثالا واحدا على طريقة للقيام بذلك ، حيث يمكنني استخدام كتس ، والتي تتوفر في العديد من قواعد البيانات ، وخاصة كيو التي أنا أكثر دراية.

كت و WITH بند

كت تسمح لك لتشكيل مؤقت ، جدول الاستعلام واحد مثل الهياكل ، ولكن منذ يمكنك جعل كس تعتمد على واحد آخر في استعلام واحد ، فإنه يوفر وسيلة مريحة وسهلة لفهم لجعل الاستعلام الخاص بك شبه الإجرائية.

في حالتك ، سأحاول

WITH AB_results AS(
  SELECT class, rank, 1 AS hidden_rank
  FROM my_relation
  WHERE class IN ('A','B')
),
Non_AB_results AS(
  SELECT class, rank, 2 AS hidden_rank
  FROM my_relation
  WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;

سأحاول وضع معا سكلفيدل في بضع دقائق هنا ، فقط للتأكد من أنني لم تحصل على بعض الاستعلام بلدي خطأ.: ع

تحرير:لقد ارتكبت خطأ بسيطا.في محاولة لتنظيفه في مثال ونحن نتكلم.

تحرير 2:تم تصحيح الخطأ الآن!لسوء الحظ ، سكلفيدل هو وجود مشكلة صغيرة في الوقت الحالي ، ولكن هنا هو الرابط إلى سكلفيدل لبعض الاختبارات.

يرجى ملاحظة أنني قد لا يكون حل هذا في الطريقة الأكثر أناقة ممكنة ، ولكن يجب أن تحل القضايا الخاصة بك.

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