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

ここで実際に「Then」条件でBorrowerIDを表示したいのですが、ここではサブクエリ部分が正常に機能し、IDを返しますが、CASEステートメントを追加すると、エラーが発生します。 'then'の近くに条件が予想されます。"このクエリは、ストアドプロシージャの一部です。解決策は何ですか。

4

2 に答える 2

1

BR.BorrowerID文字列定数の代わりにサブクエリからの値を表示する場合は'BR.BorrowerID'、次のことを試すことができます (サブクエリが 1 行しか返さないことを確認したと仮定します)。

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)テーブル」は、左側の結合の右側が行を返さない場合に結果セットが空にならないようにするためだけに存在します。

于 2012-05-23T08:55:18.940 に答える