【问题标题】:Set variable inside select statement在 select 语句中设置变量
【发布时间】:2018-09-05 19:19:29
【问题描述】:
SELECT   
    ft.id
    ,ft.date
    ,(SET @column = 
            CASE WHEN ft.a < 0 THEN 'Ok' END 
            CASE WHEN ft.b > 0 THEN 'NotOk' END
    ) AS 'Wrong sign in column ' + @column
FROM dbo.table AS ft

为什么这不起作用?我遇到了一个语法错误,我看不到它。我想根据条件构建选择的列。

消息 156,第 15 级,状态 1,第 8 行
关键字“SET”附近的语法不正确。

消息 156,第 15 级,状态 1,第 10 行
关键字“CASE”附近的语法不正确。

【问题讨论】:

    标签: sql sql-server-2008 tsql


    【解决方案1】:

    您可以直接使用变量的内容,而不是在查询中设置变量。 以下查询将为您提供所需的结果。

    另外,你不能在没有在 sql 中声明的情况下使用该变量。

    SELECT  ft.nBranchId
          , ft.tmDate
          ,'Wrong sign in column ' +
            CASE WHEN ft.fDeposits < 0 THEN 'fDeposits'
                 WHEN ft.fWithdrawals > 0 THEN 'fWithdrawals'
                 WHEN ft.fPerformanceFee > 0 THEN 'fPerformanceFee'
                 WHEN ft.fFixedFee > 0 THEN 'fFixedFee'
                 WHEN ft.fDividend > 0 THEN 'fDividend'
                 WHEN ft.fReinvestment < 0 THEN 'fReinvestment'
                 WHEN ft.fThresholdRate < 0 THEN 'fThresholdRate'
                 WHEN ft.fPerfFeeCumulated > 0 THEN 'fPerfFeeCumulated'
            END
          as ColumnName
    FROM dbo.FundTransactions AS ft
    

    【讨论】:

    • 除了我得到“没有列名”之外,这很有效
    • 您可以为该列指定别名。我已经更新了结果。
    【解决方案2】:

    你做错了...试试:

    SELECT  ft.nBranchId
          , ft.tmDate
          ,'Wrong sign in column ' +
            CASE WHEN ft.fDeposits < 0 THEN 'fDeposits'
                 WHEN ft.fWithdrawals > 0 THEN 'fWithdrawals'
                 WHEN ft.fPerformanceFee > 0 THEN 'fPerformanceFee'
                 WHEN ft.fFixedFee > 0 THEN 'fFixedFee'
                 WHEN ft.fDividend > 0 THEN 'fDividend'
                 WHEN ft.fReinvestment < 0 THEN 'fReinvestment'
                 WHEN ft.fThresholdRate < 0 THEN 'fThresholdRate'
                 WHEN ft.fPerfFeeCumulated > 0 THEN 'fPerfFeeCumulated'
            END
    FROM dbo.FundTransactions AS ft
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 2020-06-19
      • 2011-03-24
      • 2020-11-28
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多