Sql 当条件基于当前行值时
在我的Sql 当条件基于当前行值时,sql,sql-server,database,select,case,Sql,Sql Server,Database,Select,Case,在我的SELECTquery中,我想在我的CASE中为名为IsActive的值设置一个条件,以便如果当前行的列类型为“adhoc”,则将IsActive的值设置为“n/a” 但是当(Type)=“adhoc”然后是“n/a”时,我在行中得到了这个错误: “=”附近的语法不正确 如何根据当前行的条件做出决定?试试以下方法: SELECT (CASE Type WHEN 'scheduled' THEN 'Scheduled' WHEN 'adhoc'
SELECT
query中,我想在我的CASE
中为名为IsActive的值设置一个条件,以便如果当前行的列类型为“adhoc”,则将IsActive的值设置为“n/a”
但是当(Type)=“adhoc”然后是“n/a”时,我在行中得到了这个错误:
“=”附近的语法不正确
如何根据当前行的条件做出决定?试试以下方法:
SELECT (CASE Type
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END) AS 'Type',
(CASE
WHEN Type = 'adhoc' THEN 'n/a'
WHEN IsActive = 0 THEN 'Stopped'
WHEN IsActive = 1 THEN 'Active'
END) AS 'Status'
FROM MyTable;
您的第二个案例
基于一个列,然后您试图在中添加一个条件,当
时,这是不允许的:
CASE IsActive
WHEN (Type) = 'adhoc' THEN 'n/a'
WHEN 0 THEN 'Stopped'
WHEN 1 THEN 'Active'
END AS 'Status'
我想您是有意这样做的(使用一个不带列的案例
,并在时将条件放入):
MS Sql Server不支持当前的计算行操作。
为了实现这一目标,您必须提到Cte
with cteType as (
SELECT CASE Type
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END AS 'Type'
FROM MyTable)
select Type
,
CASE IsActive
WHEN (Type) = 'adhoc' THEN 'n/a'
WHEN 0 THEN 'Stopped'
WHEN 1 THEN 'Active'
END AS 'Status'
FROM cteType
这将起作用Pedram jaan您的查询如下:
SELECT CASE [Type]
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END AS 'Type',
CASE
WHEN [Type] = 'adhoc' THEN 'n/a'
WHEN IsActive = 0 THEN 'Stopped'
WHEN IsActive = 1 THEN 'Active'
END AS 'Status'
FROM dbo.MyTable
使用括号中的类型,如[Type]。这是一个关键词。Pedram jaan?哈哈,妈妈!你的回答是正确的。但恐怕我得选一个早些时候发布的。
SELECT CASE Type
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END AS 'Type',
CASE WHEN [Type] = 'adhoc' THEN 'n/a'
WHEN IsActive = 0 THEN 'Stopped'
WHEN IsActive = 1 THEN 'Active'
END AS 'Status'
FROM MyTable
with cteType as (
SELECT CASE Type
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END AS 'Type'
FROM MyTable)
select Type
,
CASE IsActive
WHEN (Type) = 'adhoc' THEN 'n/a'
WHEN 0 THEN 'Stopped'
WHEN 1 THEN 'Active'
END AS 'Status'
FROM cteType
SELECT CASE [Type]
WHEN 'scheduled' THEN 'Scheduled'
WHEN 'adhoc' THEN 'AdHoc'
ELSE 'Unknown'
END AS 'Type',
CASE
WHEN [Type] = 'adhoc' THEN 'n/a'
WHEN IsActive = 0 THEN 'Stopped'
WHEN IsActive = 1 THEN 'Active'
END AS 'Status'
FROM dbo.MyTable