如果sql中有CTE的条件



我试图创建一个视图,我需要把条件放在一年,我正在尝试下面的代码,但我得到一个错误。谁能告诉我是否可能。而需要的输出我只能使用CTE。' if '附近的语法错误

代码如下:

Declare @year varchar(20)
Set @year = ‘2022’;
With CTE as 
( 
If @year = ‘2022’ 
Begin 
(
Select 
@year , 
Prev_date = (select    DATEADD(month, -1,GETDATE()))
)
End; 
Else 
Begin 
(
Select @year,
Prev_date=  (select    DATEADD(month, -2,GETDATE()))
)
End;
)
Select * 
From CTE

我不完全确定你想用你的cte实现什么,但是关于条件,你可以尝试将以下内容放入你的视图/查询/任何:

Declare @year varchar(20)
Set @year = '2022';
SELECT [year] = @year, [prev_date] = DATEADD(month, -1 * CASE WHEN @year = '2022' THEN 1 ELSE 2 END, GETDATE())

IFBEGINEND与程序代码有关,不能在此上下文中使用。

您的代码,无需进一步说明,可以替换为:

DECLARE @Year varchar(20);
SET @Year = '2022';
WITH CTE AS
( 
SELECT Year = @year,
PrevDate = DATEADD(month, -1,GETDATE())
)
SELECT * 
FROM CTE;

一个注释和一条建议:看起来(我错了吗?)你正处于学习的开端。请尝试保持SQL Server的编码指南。我做了一些快速的改进。下面的示例链接:https://blog.sqlauthority.com/2008/09/25/sql-server-guidelines-and-coding-standards/

您可以使用简单有效的查询,而不是使用CTE,因为CTE应该用于复杂的查询。

Declare @year varchar(20) Set @year = '2023';
select @year [Year], prev_date = case when @year='2022' then  (Select  DATEADD(month, -1,GETDATE())) else     DATEADD(month, -2,GETDATE()) end

您没有给出错误和您正在使用的数据库。我猜你的sql应该是语法错误,请试试这个

Declare @year varchar(20)
Set @year = ‘2022’
With CTE as 
( 
If @year = ‘2022’ 
Begin 
{
Select 
@year , 
(select DATEADD(month, -1,GETDATE())) as previous_date
}
END;
)
Select * 
From CTE

BEGIN ... END;必须与{..}在使用多个语句的情况下使用。希望对你有所帮助。

相关内容

  • 没有找到相关文章

最新更新