Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL from语句中的IF子句_Sql_Sql Server_Tsql_If Statement - Fatal编程技术网

SQL from语句中的IF子句

SQL from语句中的IF子句,sql,sql-server,tsql,if-statement,Sql,Sql Server,Tsql,If Statement,我需要一个临时的解决方案来解决我造成的问题。基本上我想计算两个值,但根据条件的结果使用不同的方法 选择userReturnval、userregisterid和OtherValue 从…起 选择其他值 从…起 as tblO-不相关表 , 如果从表1中选择countuserregisterid,其中site=@siteID和userid=@userid>0 选择userReturnval、userregisterid 从…起 选择userReturnval、userregisterid、按分区排

我需要一个临时的解决方案来解决我造成的问题。基本上我想计算两个值,但根据条件的结果使用不同的方法

选择userReturnval、userregisterid和OtherValue 从…起 选择其他值 从…起 as tblO-不相关表 , 如果从表1中选择countuserregisterid,其中site=@siteID和userid=@userid>0 选择userReturnval、userregisterid 从…起 选择userReturnval、userregisterid、按分区排序。。订购人。。。作为等级 从…起 WHERE-第一WHERE子句 作为tblRank 其中秩=1 其他的 选择userReturnval、userregisterid 从…起 选择userReturnval、userregisterid、按分区排序。。订购人。。。作为等级 从…起 WHERE-不同WHERE子句 作为tblRank 其中秩=1 作为tblR 我的if本身工作得很好,我只是想让它作为更大查询的一部分工作。目前,sqlserver不喜欢if在其中


希望有人能给我指出正确的方向

您可以尝试在WHERE子句中使用case语句,类似于下面的语句。请注意,我不认为这对性能特别有利

这样做确实可以让您将其保留为一条语句:

select userReturnval, userregisterid, OtherValue
FROM
(
   (SELECT otherValue
   FROM...
   ) as tblO  --unrelated table
  ,

  ( 
    SELECT userReturnval, userregisterid
    FROM
    (
     SELECT userReturnval, userregisterid, Rank() OVER (PARTITION BY .. ORDER BY       ...) as RANK
            FROM ...
            WHERE 
                case --Choose which where clause to use
                    when (select count(userregisterid) from table1 where site =@siteID and userid=@userID) >0 then 
                        case when /*First where clause*/ then 1
                        else 0
                        end
                    else
                        case when /*Second where clause*/ then 1
                        else 0
                        end
                    end
                 = 1                
        ) as tblRank
        WHERE (RANK =1)
  ) as tblR

我假设您执行的不是一个查询。请确认它是存储过程中的T-SQL?是的。我将返回一个helper对象,该对象包含从DB中获取的多个单独的值。单独计算的表之间没有联接。不喜欢意味着什么?是否有任何错误消息或只是意外行为?请再详细一点。我认为您需要首先使用您的条件填充临时表变量,然后从这些表中选择。userReturnval和userregisterid来自何处,以及IF操作与其他操作有何不同?谢谢!这是做这件事的方法。显然,这只是一个临时措施——我在几周内无法修补,否则我将创建新的程序并调用它们。再次感谢!