【问题标题】:Conflict in Case Condition in Sql Server querySql Server 查询中的案例条件冲突
【发布时间】:2012-05-23 16:57:22
【问题描述】:
select  CASE when  (select distinct BR.BorrowerID from tblBorrow BR 
inner join tblWorker W on W.ContractorID=BR.BorrowerID 
inner join  tblBorrowWorker TWB on  TWB.WorkerID=W.WorkerID 
inner join tblBorrowWorkerAssign TBWA on TWB.BorrowWorkerAssignmentID=TBWA.BorrowWorkerAssignmentID where TWB.WorkerID=11276) then 'BR.BorrowerID'   else 'NotBorrowed' end as BorrowedStatus

这里实际上在“然后”条件下我想显示 BorrowerID,这里子查询部分运行良好并返回 ID,但是当我添加 CASE 语句时,它给出了一个错误 “在预期条件的上下文中指定的非布尔类型的表达式,靠近'then'。”此查询是我的存储过程的一部分。解决方案是什么

【问题讨论】:

    标签: sql tsql sql-server-2005


    【解决方案1】:

    CASE 子句需要一个布尔条件。您可以使用 Exists() 检查真实情况吗?尝试使用 exists() 进行内部选择语句(以select distinct BR.BorrowerID from tblBorrow BR... 开头)

    【讨论】:

    • 所以我要放置的地方存在,在内部查询中
    • 类似select CASE when Exists (< select statement that results in true/false value>)
    • 是的,它工作得很好,谢谢你...,但在那时我想添加 ID,我的意思是 BorrowerID 设置为“是”或“真”,因为在 UI 级别我想显示名称,但是在这里我添加了 BorrowerId
    【解决方案2】:

    如果您的意思是从子查询中显示 BR.BorrowerID 的值而不是 'BR.BorrowerID' 字符串常量,您可以尝试以下操作(假设您已确保子查询返回不超过一行):

    SELECT
      ISNULL(
        (
          SELECT DISTINCT CAST(BR.BorrowerID AS varchar(15))
          FROM tblBorrow BR 
          INNER JOIN tblWorker W ON W.ContractorID = BR.BorrowerID 
          INNER JOIN tblBorrowWorker TWB ON TWB.WorkerID = W.WorkerID 
          INNER JOIN tblBorrowWorkerAssign TBWA ON TWB.BorrowWorkerAssignmentID = TBWA.BorrowWorkerAssignmentID
          WHERE TWB.WorkerID=11276
        ),
        'NotBorrowed'
      )
    

    另一方面,如果这是您帖子中的完整查询(不是更大查询的一部分),则以下选项也可能是一种选择:

    SELECT DISTINCT ISNULL(CAST(BR.BorrowerID AS varchar(15)), 'NotBorrowed')
    FROM
        (SELECT 1) x (x)
        LEFT JOIN
            tblBorrow BR 
            INNER JOIN tblWorker W ON W.ContractorID = BR.BorrowerID 
            INNER JOIN tblBorrowWorker TWB ON TWB.WorkerID = W.WorkerID 
            INNER JOIN tblBorrowWorkerAssign TBWA ON TWB.BorrowWorkerAssignmentID = TBWA.BorrowWorkerAssignmentID
        ON TWB.WorkerID = 11276
    

    (SELECT 1) x (x)“表”只是为了确保结果集不为空,以防左连接的右侧不返回任何行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多