OR
ผู้ประกอบการในWHEN
ประโยคของCASE
คำสั่งที่ไม่สนับสนุน ฉันจะทำสิ่งนี้ได้อย่างไร
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
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
=
จะทำงานถ้าคุณเปรียบเทียบกับค่าเดียว อย่างไรก็ตาม(22978, 23218, 23219)
เป็นอาร์เรย์และIN
จำเป็นต้องจับคู่ค่าใดค่าหนึ่งเท่านั้น
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
IN
คำหลักเป็นวิธีที่ดีกว่ามาก
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
คุณสามารถใช้หนึ่งในการแสดงออกที่เมื่อมี แต่คุณไม่สามารถผสมทั้งสอง
เมื่อใดเมื่อแสดงออกมา
เป็นนิพจน์อย่างง่าย ๆ ที่ input_expression ถูกเปรียบเทียบเมื่อใช้รูปแบบ CASE แบบง่าย when_expression คือการแสดงออกที่ถูกต้องใด ๆ ชนิดข้อมูลของ input_expression และแต่ละ when_expression จะต้องเหมือนกันหรือจะต้องมีการแปลงโดยนัย
เมื่อ Boolean_expression
นิพจน์บูลีนถูกประเมินค่าเมื่อใช้รูปแบบ 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
แต่ในกรณีใด ๆ คุณสามารถคาดหวังว่าการจัดอันดับตัวแปรจะถูกเปรียบเทียบในนิพจน์บูลีน
ดูCASE (Transact-SQL) (MSDN)
มีคำตอบมากมายเกี่ยวกับเรื่องCASE
นี้แล้ว ฉันจะอธิบายเวลาและวิธีการใช้CASE
ผมจะอธิบายเมื่อและวิธีการใช้
คุณสามารถใช้นิพจน์ CASE ได้ทุกที่ในแบบสอบถาม SQL สามารถใช้นิพจน์ CASE ภายในคำสั่ง SELECT, WHERE clauses, เรียงลำดับตามคำสั่ง, HAVING clauses, แทรก, UPDATE และคำสั่ง DELETE
นิพจน์ CASE มีสองรูปแบบต่อไปนี้:
การแสดงออกกรณีง่าย
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
สิ่งนี้เปรียบเทียบนิพจน์กับชุดของนิพจน์อย่างง่ายเพื่อค้นหาผลลัพธ์ นิพจน์นี้เปรียบเทียบนิพจน์กับนิพจน์ในแต่ละส่วนของ WHEN เพื่อความเท่าเทียม หากการแสดงออกภายในข้อ WHEN ถูกจับคู่การแสดงออกในประโยคนั้นจะถูกส่งกลับ
นี่คือที่คำถามของ OP ลดลง 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
นิพจน์นี้ประเมินชุดของนิพจน์บูลีนเพื่อค้นหาผลลัพธ์ นิพจน์นี้อนุญาตให้ตัวดำเนินการเปรียบเทียบและตัวดำเนินการเชิงตรรกะและ / หรือมีในแต่ละนิพจน์บูลีน
1.SELECT คำสั่งที่มีการแสดงออกกรณี
--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. อัพเดตคำสั่งด้วยนิพจน์ CASE
-- 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.ORDER โดยส่วนคำสั่งที่มีการแสดงออกกรณี
-- 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. มีส่วนคำสั่ง 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;
ELSE Sales
ฟิลด์ซึ่งส่งคืนค่าดีฟอลต์หากไม่รวมอยู่ในคำสั่ง case ซึ่งเหมาะสำหรับเคียวรีธุรกิจ
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
table_name
= ชื่อของตารางที่คุณต้องการดำเนินการ
column_name
= ชื่อของคอลัมน์ / ฟิลด์ที่คุณต้องการตั้งค่า
update_value
= ค่าที่คุณต้องการตั้งค่า column_name
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,
case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional
item' end 'Promotion'
From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
inner join tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2 and s.isSerialBased=0