0

このcaseステートメントに問題があります。何が間違っているのかわかりませんが、エラーが発生します。

EXISTSでサブクエリが導入されていない場合、選択リストで指定できる式は1つだけです。

フィールドが値と等しい場合は左外部結合を実行しますが、フィールドが別の値と等しい場合は内部結合を実行します。これは私の質問です:

SELECT
case when oqt = '26' then

(Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.* FROM OQMethods QM left outer join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 WHERE QM.id_oqt in (SELECT tempoq.oqt FROM tempoq INNER JOIN OQMethods ON tempoq.oqt = OQMethods.id_oqt)and active = 1) END, case when oqt = '31' then (Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.* FROM OQMethods QM inner join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 where QM.id_oqt in (SELECT tempoq.oqt FROM tempoq INNER JOIN OQMethods ON tempoq.oqt = OQMethods.id_oqt) and active = 1) END from tempoq
4

3 に答える 3

4

ケースは、値に評価される必要がある式です。選択した Select ステートメントは、複数の値を返します。

Case を C# スイッチのように使用しようとしているように見えますか? その場合は、IF ELSE IF構築したほうがよいでしょう。

于 2012-05-08T14:12:31.570 に答える
2

CASE ステートメントを使用するのではなく、このようなことをしたいようです。

DECLARE @t int
-- This would contain your oqt value
SET @t =1


IF @t = 1 
BEGIN
   SELECT * FROM tableA
END
ELSE IF @t = 2
BEGIN
   SELECT * FROM TableB
END
于 2012-05-08T14:16:40.460 に答える
0
Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.*
 FROM OQMethods QM 
 inner join tempoq on tempoq.oqt = QM.id_oqt
 left outer join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 
 WHERE active = 1 and (tempoq.oqt = '26' or (tempoq.oqt = '31' and courseversions.* is not null))

left outer joinは、一致するデータがない場合でも結合OQMethodsのデータを意味し、nullでcourseversionsデータをフィルタリングします。courseversions.*inner join

私が正しい理解を持っていることを願っています。

于 2012-05-08T14:45:33.483 に答える