هل هناك طريقة يمكنني جعل CASE WHEN اختبار واحدة من النتائج بدلا من تشغيله مرتين؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

هل هناك طريقة لاستخدام القيمة من CASE WHEN اختبار واحدا من نتائجها دون كتابة خارج حدد البيان مرتين (لأنه يمكن أن تكون طويلة والفوضى)؟ على سبيل المثال:

 SELECT id,
     CASE WHEN (
         (SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
     )
     THEN (
         SELECT (MAX(value) FROM my_table WHERE other_value = 1
     ) 
     ELSE 0
 END AS max_value
     FROM other_table

هل هناك طريقة يمكنني استخدام نتيجة الجولة الأولى من عبارة SELECT (للاختبار) كقيمة THEN كذلك؟ حاولت استخدام "AS MAX_VALUE" بعد أول SELECT ولكنه أعطاني خطأ SQL.

على تحديث : في يصيح، كما أشار توم H.، وأنا نسيت "IS NOT NULL" في سؤالي الأصلي

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

المحلول

وهذا المثال يوضح كيف يمكنك إعداد مجموعة من القيم في فرعي، واستخدامها في حالة في SELECT الخارجي.

select
    orderid,
    case when maxprice is null then 0 else maxprice end as maxprice
from (
    select
        orderid = o.id,
        maxprice = (select MAX(price) from orderlines ol 
                    where ol.orderid = o.id)
    from orders o
) sub

ولست متأكدا إذا كان هذا ما كنت بعد، فإن السؤال غير واضح (على سبيل المثال، لديك 2 MAX () الاستفسارات يبدو أن نسخ طبق الأصل).

نصائح أخرى

هل بيانكم حتى تشغيل؟ انها ليست تعبير منطقي في بيان قضيتك. هل الخلية الافتراضي إلى التحقق من قيمة NULL إذا كنت لا تستخدم منطقية؟

وأعتقد أن هذا هو ربما ما كنت تبحث عن:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top