OR
في جملة WHEN
لبيان CASE
غير معتمد. كيف يمكنني أن أفعل هذا؟
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
يتطلب هذا التنسيق استخدام إما:
CASE ebv.db_no
WHEN 22978 THEN 'WECS 9500'
WHEN 23218 THEN 'WECS 9500'
WHEN 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
خلاف ذلك ، استخدم:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
CASE
WHEN ebv.db_no = 22978 OR
ebv.db_no = 23218 OR
ebv.db_no = 23219
THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
يمكنك استخدام أحد التعبيرات التي تحتوي عليها WHEN ، لكن لا يمكنك مزجها.
عندما when_expression
هو تعبير بسيط يتم مقارنة إدخاله عند استخدام تنسيق CASE البسيط. when_expression أي تعبير صحيح. يجب أن تكون أنواع البيانات من input_expression وكل when_expression هي نفسها أو يجب أن تكون تحويلًا ضمنيًا.
عندما Boolean_expression
يتم تقييم تعبير Boolean عند استخدام تنسيق CASE الذي تم البحث عنه. Boolean_expression هو أي تعبير منطقي صالح.
هل يمكن أن البرنامج:
1.
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
2.
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
ولكن على أي حال ، يمكنك توقع أن الترتيب المتغير سيتم مقارنته في تعبير منطقي.
راجعالحالة (SQL للعمليات)(MSDN).
هناك بالفعل الكثير من الإجابات فيما يتعلق بـ CASE
. ساوضح متى وكيف تستخدم CASE
.
يمكنك استخدام تعبيرات CASE في أي مكان في استعلامات SQL. يمكن استخدام تعبيرات CASE ضمن عبارة SELECT ، حيث الجمل ، الترتيب حسب الفقرة ، عبارات HAVING ، إدراج ، UPDATE و DELETE.
يحتوي تعبير CASE على التنسيقين التاليين:
تعبير حالة بسيطة
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
يقارن هذا تعبير بمجموعة من التعبيرات البسيطة للعثور على النتيجة. يقارن هذا التعبير تعبيرًا بالتعبير في كل جملة WHEN من أجل التكافؤ. إذا تم مطابقة التعبير ضمن جملة WHEN ، فسيتم إرجاع التعبير في جملة THEN.
هذا هو المكان الذي يسقط سؤال البروتوكول الاختياري. لن تحصل 22978 OR 23218 OR 23219
على قيمة مساوية للتعبير ، بمعنى ebv.db_no. هذا هو السبب في أنه يعطي خطأ. يجب أن تكون أنواع البيانات من input_expression وكل when_expression هي نفسها أو يجب أن تكون تحويلًا ضمنيًا.
بحثت تعبيرات الحالة
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
يقيم هذا التعبير مجموعة من التعبيرات المنطقية للعثور على النتيجة. يتيح هذا التعبير عوامل المقارنة ، و/أو العوامل المنطقية AND/OR مع كل تعبير منطقي.
بيان 1.SELECT مع تعبيرات CASE
--Simple CASE expression:
SELECT FirstName, State=(CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
-- Searched CASE expression:
SELECT FirstName,State=(CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
2. تحديث البيان مع تعبير الحالة
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END
3.ORD BY جملة مع تعبيرات الحالة
-- Simple CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE Gender WHEN 'M' THEN FirstName END Desc,
CASE Gender WHEN 'F' THEN LastName END ASC
-- Searched CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE WHEN Gender='M' THEN FirstName END Desc,
CASE WHEN Gender='F' THEN LastName END ASC
4.Having جملة مع التعبير CASE
-- Simple CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE Gender WHEN 'F'
THEN PayRate
ELSE NULL END) > 170.00)
-- Searched CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE WHEN Gender = 'F'
THEN PayRate
ELSE NULL END) > 170.00)
نأمل أن تساعد حالات الاستخدام هذه شخصًا ما في المستقبل.
محاولة
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
SELECT
Store_Name,
CASE Store_Name
WHEN 'Los Angeles' THEN Sales * 2
WHEN 'San Diego' THEN Sales * 1.5
ELSE Sales
END AS "New Sales",
Txn_Date
FROM Store_Information;
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender
from contacts
UPDATE table_name
SET column_name=CASE
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
END