首页 文章

case子句在where子句中

提问于
浏览
0

我发现了一些与我想要做的非常类似的帖子,但它似乎没有用 . 我的选择中有这个案例:

case 
        when h.Posted_Flag=-1 and h.Returned_Flag=0 then 'Posted'
        when h.Posted_Flag=0 then 'Unposted'
        when h.Returned_Flag=1 and h.Posted_Flag=-1 then 'Returned'
        when h.Returned_Flag = 2 then 'Partial Return'
        else '*****'
end as Return_Status,

我想把它放在我的where子句中,等于我设置的变量:

Declare @TicketStatus nvarchar
set @TicketStatus = 'Returned'

and @TicketStatus=(case 
            when h.Posted_Flag=-1 and h.Returned_Flag=0 then 'Posted'
            when h.Posted_Flag=0 then 'Unposted'
            when h.Returned_Flag=1 and h.Posted_Flag=-1 then 'Returned'
            when h.Returned_Flag = 2 then 'Partial Return'
            end)

当我尝试运行我所拥有的东西时,我没有返回任何记录,当我在没有AND的情况下运行它时(情况)有许多返回的返回状态 .

任何帮助都会很棒 .

谢谢BD

2 回答

  • 5

    这是您如何声明变量的问题 . 如果你这样做会怎么样?

    Declare @TicketStatus nvarchar
    set @TicketStatus = 'Returned'
    
    SELECT @TicketStatus
    

    返回的值是 'R' ,而不是 'Returned' ,这是因为您没有给变量赋予长度 . 你应该做这个:

    Declare @TicketStatus nvarchar(15)
    set @TicketStatus = 'Returned'
    
  • 0

    你为什么不用这个条件?

    h.Returned_Flag=1 and h.Posted_Flag=-1
    

相关问题