我有一个使用case语句的存储过程如下:我要做的是评估testTable中的2列日期。所以下面的case语句说如果stop_date为null或大于当前日期,则设置is_active cloumn为Y else N
我要做的还是评估另一个日期列,说另一个_stop_date并检查它是否为null或者日期大于今天并使用相同的逻辑来更新is_active列
我不确定我们是否可以使用多个case语句来更新单个列?
我已经评论了下面的代码,我没有得到正确的结果
基本上需要从testTable中评估stop_dt和another_stop_date列!
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[p_test]
@Blank_Row CHAR(1) = 'N'
AS
BEGIN
SET NOCOUNT ON
DECLARE @TD DATETIME
SELECT @TD = GETDATE()
DECLARE @tempTable TABLE (
ID INT,
c_id INT,
desc varchar(40),
date datetime,
s_col TinyINT,
is_active char(1),
stuff VARCHAR(8))
INSERT INTO @tempTable
SELECT id, c_id, desc, max( date ), 1,
CASE WHEN (stop_dt IS NULL OR stop_dt > @TD) THEN 'Y'
--//Case When (another_stop_date is NULL or another Stop_date > @TD) THEN 'Y'<-----confused here
ELSE 'N' END,
stuff
FROM testTable
GROUP BY id, stop_dt, c_id, desc, stuff, another_stop_date
Select * from tempTable
答案 0 :(得分:3)
您可以将case语句中的子句与通常的逻辑运算符结合使用,也可以使用单独的case:
Case
When
(stop_dt is null or stop_dt > @td) and
(another_stop_date is null or another_stop_date > @td)
Then 'Y'
Else 'N'
End
答案 1 :(得分:0)
Case语句在if语句附近运行,可以有多个子句。
Case when condition_1 > 1 then 'hi'
when condition_1 < 14 then 'no'
when condition_89 > 12 then 'why is this here'
else 1
end
将其应用于您的陈述:
CASE WHEN (stop_dt IS NULL OR stop_dt > @TD) THEN 'Y'
When (another_stop_date is NULL or another Stop_date > @TD) THEN 'Y'<-----confused here
ELSE 'N' END