هل هناك طريقة يمكنني جعل CASE WHEN اختبار واحدة من النتائج بدلا من تشغيله مرتين؟
-
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