Wer*_*ner 556 sql t-sql sql-server case case-when
本OR该在WHEN一个子句CASE语句不支持.我怎样才能做到这一点?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Run Code Online (Sandbox Code Playgroud)
OMG*_*ies 1063
该格式要求您使用以下任一种:
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
Run Code Online (Sandbox Code Playgroud)
否则,使用:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Run Code Online (Sandbox Code Playgroud)
小智 244
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
Run Code Online (Sandbox Code Playgroud)
Cad*_*oux 57
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Run Code Online (Sandbox Code Playgroud)
Alf*_*lus 52
您可以使用WHEN具有的表达式之一,但不能将它们混合使用.
当when_expression时
是一个简单的表达式,当使用简单的CASE格式时,input_expression与之比较.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'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
但无论如何,您可以预期变量排名将在布尔表达式中进行比较.
请参阅CASE(Transact-SQL)(MSDN).
Som*_*luk 36
已经有很多答案了CASE.我将解释何时以及如何使用CASE.
您可以在SQL查询中的任何位置使用CASE表达式.CASE表达式可以在SELECT语句,WHERE子句,Order by子句,HAVING子句,Insert,UPDATE和DELETE语句中使用.
CASE表达式具有以下两种格式:
简单的CASE表达
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Run Code Online (Sandbox Code Playgroud)
这会将表达式与一组简单表达式进行比较,以查找结果.此表达式将表达式与每个WHEN子句中的表达式进行比较以获得等效性.如果WHEN子句中的表达式匹配,则返回THEN子句中的表达式.
这是OP的问题正在下降的地方.22978 OR 23218 OR 23219不会得到一个等于表达式的值,即ebv.db_no.这就是为什么它会出错.input_expression和每个when_expression的数据类型必须相同或必须是隐式转换.
搜索CASE表达式
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Run Code Online (Sandbox Code Playgroud)
此表达式计算一组布尔表达式以查找结果.此表达式允许在每个布尔表达式中使用比较运算符和逻辑运算符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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
带有CASE表达式的3.ORDER 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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
希望这个用例将来有助于某人.
JNK*_*JNK 34
尝试
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
Run Code Online (Sandbox Code Playgroud)
小智 28
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2987305 次 |
| 最近记录: |