SQL Server SQL中具有CTE的If条件

oprakyz7  于 2023-01-12  发布在  其他
关注(0)|答案(4)|浏览(148)

我试图创建一个视图,我需要把条件放在年,我尝试下面的代码,但我得到了一个错误。有人能请建议,如果可能的话。和输出这是必需的,我必须只使用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
5vf7fwbs

5vf7fwbs1#

我不完全确定你想用你的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())
c7rzv4ha

c7rzv4ha2#

IFBEGINEND与程序代码相关,不能在此上下文中使用。
您的代码(无需进一步说明)可以替换为以下代码:

DECLARE @Year varchar(20);
SET @Year = '2022';

WITH CTE AS
( 
    SELECT Year = @year,
        PrevDate = DATEADD(month, -1,GETDATE())
)
SELECT * 
FROM CTE;

一张便条和一条建议:看起来(我说错了吗?2)你才刚刚开始学习。3请尽量保持SQL Server的编码指南。4我已经做了一些快速的改进。5下面是一个示例链接:https://blog.sqlauthority.com/2008/09/25/sql-server-guidelines-and-coding-standards/

mnowg1ta

mnowg1ta3#

您可以使用简单有效的查询,而不是使用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
bqf10yzr

bqf10yzr4#

你没有给予错误信息和你使用的数据库。我想你的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;必须与{..}一起使用,以防其间有多个语句。希望这能有所帮助。

相关问题