[英]How to use if else inside select statement
我有一个下面给出的存储过程,我想在选择查询中使用 if else
ALTER PROCEDURE updatepriority
@sort smallint
AS
BEGIN
SELECT
Request.SubmitTime, Request.CommitTime,
(CASE WHEN Priority.Priority = 'Live Demo' THEN 1 WHEN Priority.Priority = 'Priority Re-do' THEN 2 ELSE 3 END) AS Sort1,
END
当@sort = 1
我想使用另一个case语句并且我不想将整个语句包含在if else中
像下面的东西
IF (@sort = 1)
BEGIN
(CASE WHEN Priority.Priority = 'Live Demo' THEN 1 WHEN Priority.Priority = 'Priority Re-do' THEN 2 ELSE 3 END) AS Sort1,
END
ELSE
BEGIN
(CASE WHEN Priority.Priority = 'Live Demo' THEN 1 WHEN Priority.Priority = 'Conditional Live' THEN 2 WHEN Priority.Priority = 'Priority Re-do' THEN 3 ELSE 4 END) AS Sort1,
END
但是上面的查询会抛出一个错误,因为我们不能在 select 语句中使用 if else
是的,在sql server
中没有else
,但是您可以使用它。
if(@sort=1)
BEGIN
SELECT Request.SubmitTime, Request.CommitTime,
(CASE WHEN Priority.Priority = 'Live Demo' THEN 1 WHEN Priority.Priority = 'Priority Re-do' THEN 2 ELSE 3 END) AS Sort1 ....
END
if(@sort!=1)
BEGIN
SELECT Request.SubmitTime, Request.CommitTime,
(CASE WHEN Priority.Priority = 'Live Demo' THEN 1
WHEN Priority.Priority = 'Conditional Live' THEN 2
WHEN Priority.Priority = 'Priority Re-do' THEN 3 ELSE 4 END) AS Sort1,
....
END
如果你真的不想在两个 if/else 分支中都使用 select 语句,那么唯一的选择是对 CASE 程序集使用动态 SQL,如下所示:
create table #test (
Priority varchar(30)
);
insert #test (Priority)
values
('Live Demo'),
('Priority Re-do'),
('Conditional Live'),
('ABC');
declare @sort smallint = 1;
declare @sqlStmt varchar(max);
if(@sort=1)
BEGIN
set @sqlStmt = '
(CASE
WHEN Priority.Priority = ''Live Demo'' THEN 1
WHEN Priority.Priority = ''Priority Re-do'' THEN 2
ELSE 3 END) AS Sort1';
END
ELSE
BEGIN
set @sqlStmt = '
(CASE
WHEN Priority.Priority = ''Live Demo'' THEN 1
WHEN Priority.Priority = ''Conditional Live'' THEN 2
WHEN Priority.Priority = ''Priority Re-do'' THEN 3
ELSE 4 END) AS Sort1';
END
set @sqlStmt = 'select Priority.Priority, ''SubmitTime'' as SubmitTime, ' + @sqlStmt + ' from #test as Priority order by Sort1';
exec (@sqlStmt);
当然,你可以只取你需要的(sql 动态部分..)。
你只需要嵌套CASE
来做一些布尔逻辑
SELECT
Request.SubmitTime,
Request.CommitTime,
CASE WHEN @sort = 1 THEN
CASE WHEN Priority.Priority = 'Live Demo' THEN 1
WHEN Priority.Priority = 'Priority Re-do' THEN 2
ELSE 3
END
ELSE
CASE WHEN Priority.Priority = 'Live Demo' THEN 1
WHEN Priority.Priority = 'Conditional Live' THEN 2
WHEN Priority.Priority = 'Priority Re-do' THEN 3
ELSE 4
END
END AS Sort1,
....
你甚至可以将两个分支结合起来,让它更简洁,但上面的方法是最直接的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.