SQL 具有多个条件语法的服务器 CASE 语句
SQL Server CASE statement with mupltiple conditionals syntax
我需要在 select 中添加一个 case 语句,但我似乎无法获得正确的语法,有人可以帮忙吗?
SELECT
uuid = pnt.ID
,extras = (CASE (SELECT pnt.TypeID as [type], pnt.Source as source)
WHEN source = 7 THEN 'a'
WHEN source = 1 AND [type] = 0 THEN 'b'
WHEN source = 8 THEN 'c'
WHEN source = 2 AND [type] = 0 THEN 'd'
WHEN source = 3 AND [type] IN (5,6,7,8) THEN 'e'
ELSE NULL
END)
FROM
Mydata as pnt
问题多处,selectwithin case不正确,条件source = 7错误,AND组合条件错误,IN条件不正确
我使用 Multiple Criteria In Case Statement 的答案作为案例陈述的基础。
SELECT
@uuid = pnt.ID
,@extras = (CASE WHEN source = 7 THEN
'a'
WHEN source = 1 AND [type] = 0 THEN
'b'
WHEN source = 8 THEN
'c'
WHEN source = 2 AND [type] =0 THEN
'd'
WHEN source = 3 AND [type] IN (5,6,7,8) THEN
'e'
ELSE NULL
END
)
FROM
Mydata as pnt
SELECT ID As uuid, CASE WHEN Source = 7 THEN
'a'
WHEN Source = 1 AND TypeID= 0 THEN
'b'
WHEN Source = 8 THEN
'c'
WHEN Source = 2 AND TypeID= 0 THEN
'd'
WHEN Source = 3 AND TypeID IN (5,6,7,8) THEN
'e'
ELSE
NULL
END
AS extras FROM Mydata
SELECT
PNT.ID AS UUID
, CASE
WHEN PNT.source = 7 THEN 'a'
WHEN PNT.source = 1 AND PNT.[type] = 0 THEN 'b'
WHEN PNT.source = 8 THEN 'c'
WHEN PNT.source = 2 AND PNT.[type] = 0 THEN 'd'
WHEN PNT.source = 3 AND PNT.[type] IN (5, 6, 7, 8) THEN 'e'
ELSE NULL
END AS EXTRAS
FROM Mydata AS PNT
由于您已经在 table Mydata 中工作,因此 case expression
可以访问 [source] 和 [type] 中保存的值,而无需添加 select.
我已将列别名放在每个列定义的末尾,我相信这比为此目的使用 = 更普遍地得到数据库的支持。
有两种类型的case语句:
- 一个简单的 case 语句,将一个表达式与一组简单表达式与 return 个特定值进行比较。
- 将一组布尔表达式计算为 return 个特定值的搜索 case 语句。
https://msdn.microsoft.com/en-us/library/ms144841(v=sql.105).aspx
在您的脚本中您是 "mixing" 他们,因此您的脚本不起作用。
这可能是一个很好的解决方案:
SELECT
pnt.ID
,CASE
WHEN pnt.source = 7 THEN 'a'
WHEN pnt.source = 1 AND pnt.TypeID = 0 THEN 'b'
WHEN pnt.source = 8 THEN 'c'
WHEN pnt.source = 2 AND pnt.TypeID = 0 THEN 'd'
WHEN pnt.source = 3 AND pnt.TypeID IN (5, 6, 7, 8) THEN 'e'
ELSE NULL
END
FROM
@Mydata AS pnt
警告!
如果您需要填充单个变量(uuid、extras),您必须确保您的查询结果只有 1 条记录
我需要在 select 中添加一个 case 语句,但我似乎无法获得正确的语法,有人可以帮忙吗?
SELECT
uuid = pnt.ID
,extras = (CASE (SELECT pnt.TypeID as [type], pnt.Source as source)
WHEN source = 7 THEN 'a'
WHEN source = 1 AND [type] = 0 THEN 'b'
WHEN source = 8 THEN 'c'
WHEN source = 2 AND [type] = 0 THEN 'd'
WHEN source = 3 AND [type] IN (5,6,7,8) THEN 'e'
ELSE NULL
END)
FROM
Mydata as pnt
问题多处,selectwithin case不正确,条件source = 7错误,AND组合条件错误,IN条件不正确
我使用 Multiple Criteria In Case Statement 的答案作为案例陈述的基础。
SELECT
@uuid = pnt.ID
,@extras = (CASE WHEN source = 7 THEN
'a'
WHEN source = 1 AND [type] = 0 THEN
'b'
WHEN source = 8 THEN
'c'
WHEN source = 2 AND [type] =0 THEN
'd'
WHEN source = 3 AND [type] IN (5,6,7,8) THEN
'e'
ELSE NULL
END
)
FROM
Mydata as pnt
SELECT ID As uuid, CASE WHEN Source = 7 THEN
'a'
WHEN Source = 1 AND TypeID= 0 THEN
'b'
WHEN Source = 8 THEN
'c'
WHEN Source = 2 AND TypeID= 0 THEN
'd'
WHEN Source = 3 AND TypeID IN (5,6,7,8) THEN
'e'
ELSE
NULL
END
AS extras FROM Mydata
SELECT
PNT.ID AS UUID
, CASE
WHEN PNT.source = 7 THEN 'a'
WHEN PNT.source = 1 AND PNT.[type] = 0 THEN 'b'
WHEN PNT.source = 8 THEN 'c'
WHEN PNT.source = 2 AND PNT.[type] = 0 THEN 'd'
WHEN PNT.source = 3 AND PNT.[type] IN (5, 6, 7, 8) THEN 'e'
ELSE NULL
END AS EXTRAS
FROM Mydata AS PNT
由于您已经在 table Mydata 中工作,因此 case expression
可以访问 [source] 和 [type] 中保存的值,而无需添加 select.
我已将列别名放在每个列定义的末尾,我相信这比为此目的使用 = 更普遍地得到数据库的支持。
有两种类型的case语句:
- 一个简单的 case 语句,将一个表达式与一组简单表达式与 return 个特定值进行比较。
- 将一组布尔表达式计算为 return 个特定值的搜索 case 语句。
https://msdn.microsoft.com/en-us/library/ms144841(v=sql.105).aspx
在您的脚本中您是 "mixing" 他们,因此您的脚本不起作用。 这可能是一个很好的解决方案:
SELECT
pnt.ID
,CASE
WHEN pnt.source = 7 THEN 'a'
WHEN pnt.source = 1 AND pnt.TypeID = 0 THEN 'b'
WHEN pnt.source = 8 THEN 'c'
WHEN pnt.source = 2 AND pnt.TypeID = 0 THEN 'd'
WHEN pnt.source = 3 AND pnt.TypeID IN (5, 6, 7, 8) THEN 'e'
ELSE NULL
END
FROM
@Mydata AS pnt
警告! 如果您需要填充单个变量(uuid、extras),您必须确保您的查询结果只有 1 条记录