it-swarm.asia

مزود خدمة: حالة عندما OR ثم انتهى => the OR غير مدعومة

OR في جملة WHEN لبيان CASE غير معتمد. كيف يمكنني أن أفعل هذا؟

CASE ebv.db_no 
    WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' 
    ELSE 'WECS 9520' 
END as wecs_system 
532
Werner

يتطلب هذا التنسيق استخدام إما:

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 
1016
OMG Ponies
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 
237
Darren
CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
55
Cade Roux

يمكنك استخدام أحد التعبيرات التي تحتوي عليها WHEN ، لكن لا يمكنك مزجها.

  1. عندما when_expression

    هو تعبير بسيط يتم مقارنة إدخاله عند استخدام تنسيق CASE البسيط. when_expression أي تعبير صحيح. يجب أن تكون أنواع البيانات من input_expression وكل when_expression هي نفسها أو يجب أن تكون تحويلًا ضمنيًا.

  2. عندما 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).

48
Alfaplus

هناك بالفعل الكثير من الإجابات فيما يتعلق بـ CASE. ساوضح متى وكيف تستخدم CASE.

يمكنك استخدام تعبيرات CASE في أي مكان في استعلامات SQL. يمكن استخدام تعبيرات CASE ضمن عبارة SELECT ، حيث الجمل ، الترتيب حسب الفقرة ، عبارات HAVING ، إدراج ، UPDATE و DELETE.

يحتوي تعبير CASE على التنسيقين التاليين:

  1. تعبير حالة بسيطة

    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 هي نفسها أو يجب أن تكون تحويلًا ضمنيًا.

  2. بحثت تعبيرات الحالة

    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)

نأمل أن تساعد حالات الاستخدام هذه شخصًا ما في المستقبل.

المصدر

33
Somnath Muluk

محاولة

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
31
JNK
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;
26
Archu
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts
2
Debendra Dash
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
2
Anand agrawal