【问题标题】:Case when SQL statement into variableSQL语句变成变量的情况
【发布时间】:2016-06-23 14:48:04
【问题描述】:

我需要在 sybase sql 上为 case when statement 创建一个变量。我的 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) 

【问题讨论】:

  • SET @OutputName = (select (case when .....) as outputname) ....

标签: tsql sap-ase


【解决方案1】:

问题是您不能将设置变量的SELECT 与在屏幕上返回数据的SELECT 结合使用。

您将@OutputName 设置为(case when (a.M_TRN_TYPE='XSW' .. ),但在同一个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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多