我试图创建一个视图,我需要把条件放在一年,我正在尝试下面的代码,但我得到一个错误。谁能告诉我是否可能。而需要的输出我只能使用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())
IF
、BEGIN
、END
与程序代码有关,不能在此上下文中使用。
您的代码,无需进一步说明,可以替换为:
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;
必须与{..}
在使用多个语句的情况下使用。希望对你有所帮助。