2012-05-08 24 views
0

このケースステートメントに問題があります。大文字小文字のステートメント

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
+0

1つの列に複数の列(明らかに複数の行)を配置しようとしていますが、もちろんエラーが送信されます – Lamak

答えて

4

場合は値に評価されなければならない式です。あなたが持っているSelectステートメントは、複数の値を返します。

C#スイッチのようにCaseを使用しようとしているようですね。そうであれば、IF ELSE IF工事ではもっと良いでしょう。

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 
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手段次いでinner joinでヌルcourseversions.*でデータをフィルタリングcourseversions、 からも不一致データOQMethodsのデータを結合します。

希望私は正しい理解を持っています。

+0

ありがとう、すべてが良いですが、私はoqt以上の値を持つことができます。それらの値が26または31に等しいときにif文を調べる。 –