2016-06-23 6 views
0

sybase sqlのcase when statementの変数を作成する必要があります。私のSQLクライアントからこのエラーがありますSQL文を変数に挿入する場合

変数に値を割り当てるSELECT文は、データ検索操作と組み合わせて であってはいけません。

この変数を適切に使用するには、何が必要ですか?

DECLARE @OutputName CHAR(50) 
SELECT @OutputName= 
(case when (a.M_TRN_TYPE='XSW' or a.M_TRN_TYPE='SWLEG') then 'FXSW' 
     when (a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS='C') then 'DCS' 
     when a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS<>'C' and SUBSTRING(c.M_SP_SCHED0,1,2)='+1' then 
                         (case when b.M_DTE_SKIP_1>=a.M_TP_DTEEXP then 'SPOT' else 'OUTR' end) 
     when a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS<>'C' and SUBSTRING(c.M_SP_SCHED0,1,2)<>'+1' then 
                         (case when b.M_DTE_SKIP_2>=a.M_TP_DTEEXP then 'SPOT' else 'OUTR' end) 
end), 
case when @OutputName='XSW' and 
       (case when c.M_DATESKIP='+1OD' then b.M_DTE_SKIP_1 else b.M_DTE_SKIP_2 end)=a.M_TP_DTEFST 
         then 0 
       else a.M_NB 
       end as 'NBI' 
from TP_COMPL_PL_REP b 
join TP_ALL_REP a on (a.M_NB=b.M_NB and a.M_REF_DATA=b.M_REF_DATA) 
left join DM_SPOT_CONTRACT_REP c on (a.M_NB=c.M_NB and a.M_REF_DATA=c.M_REF_DATA) 
+0

'SET @OutputNameは=()(ケース場合を.....選択として出力名).... ' –

答えて

0

問題は、画面上にデータを返すSELECTを持つ変数を設定しますSELECTを組み合わせることができないということです。

あなたは(case when (a.M_TRN_TYPE='XSW' ..)@OutputNameを設定しますが、同じSELECTであなたもの結果を表示しようとしている:

case 
    when @OutputName='XSW' and 
     (case 
       when c.M_DATESKIP='+1OD' 
        then b.M_DTE_SKIP_1 
       else b.M_DTE_SKIP_2 
      end)=a.M_TP_DTEFST 
       then 0 
    else a.M_NB 
end as 'NBI' 

あなたはあなたがしている形式で、同じSELECTにこれら二つを持つことはできませんを使用して。私の推薦は、それらを分割する変数を割り当てるためのものである:

DECLARE @OutputName CHAR(50) 
SELECT @OutputName= 
(case when (a.M_TRN_TYPE='XSW' or a.M_TRN_TYPE='SWLEG') then 'FXSW' 
     when (a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS='C') then 'DCS' 
     when a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS<>'C' and SUBSTRING(c.M_SP_SCHED0,1,2)='+1' then 
                         (case when b.M_DTE_SKIP_1>=a.M_TP_DTEEXP then 'SPOT' else 'OUTR' end) 
     when a.M_TRN_TYPE<>'SWLEG' and a.M_TP_DVCS<>'C' and SUBSTRING(c.M_SP_SCHED0,1,2)<>'+1' then 
                         (case when b.M_DTE_SKIP_2>=a.M_TP_DTEEXP then 'SPOT' else 'OUTR' end) 
end) 
from TP_COMPL_PL_REP b 
join TP_ALL_REP a on (a.M_NB=b.M_NB and a.M_REF_DATA=b.M_REF_DATA) 
left join DM_SPOT_CONTRACT_REP c on (a.M_NB=c.M_NB and a.M_REF_DATA=c.M_REF_DATA) 

とつのデータを返す:

SELECT case when @OutputName='XSW' and 
       (case when c.M_DATESKIP='+1OD' then b.M_DTE_SKIP_1 else b.M_DTE_SKIP_2 end)=a.M_TP_DTEFST 
         then 0 
       else a.M_NB 
       end as 'NBI' 
from TP_COMPL_PL_REP b 
join TP_ALL_REP a on (a.M_NB=b.M_NB and a.M_REF_DATA=b.M_REF_DATA) 
left join DM_SPOT_CONTRACT_REP c on (a.M_NB=c.M_NB and a.M_REF_DATA=c.M_REF_DATA) 
関連する問題