2012-05-23 66 views
0
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,在這裏子查詢部分運作良好, 「在預期條件的上下文中指定的非布爾類型的表達式,在'then'附近。」該查詢是我存儲的過程的一部分。什麼將是解決方案在SQL Server查詢情況下的衝突

回答

1

CASE子句期望布爾條件。你可以使用Exists()來檢查真實情況嗎?嘗試使用存在的(​​)內爲select語句(從select distinct BR.BorrowerID from tblBorrow BR...

+0

因此,我將存在,在內部查詢 – RnR

+0

有點像'選擇CASE當存在(<選擇語句導致真/假值>)' – rt2800

+0

雅的工作非常感謝你......,但在那時條件我想添加ID我的意思BorrowerID instaed'Yes'或'真實',因爲在UI級別我想顯示名稱,但這裏hw我添加BorrowerId – RnR

1

如果你的意思是從子查詢,而不是'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)「表」僅用於確保在左連接的右側不返回任何行時結果集不爲空。