2014-09-04 2 views
0
SELECT 
    ft.nBranchId 
    ,ft.tmDate 
    ,(SET @column = 
      CASE WHEN ft.fDeposits < 0 THEN 'fDeposits' END 
      CASE WHEN ft.fWithdrawals > 0 THEN 'fWithdrawals' END 
      CASE WHEN ft.fPerformanceFee > 0 THEN 'fPerformanceFee' END 
      CASE WHEN ft.fFixedFee > 0 THEN 'fFixedFee' END 
      CASE WHEN ft.fDividend > 0 THEN 'fDividend' END 
      CASE WHEN ft.fReinvestment < 0 THEN 'fReinvestment' END 
      CASE WHEN ft.fThresholdRate < 0 THEN 'fThresholdRate' END 
      CASE WHEN ft.fPerfFeeCumulated > 0 THEN 'fPerfFeeCumulated' END 
    ) AS 'Wrong sign in column ' + @column 
FROM dbo.FundTransactions AS ft 

Почему это не работает? Я получаю синтаксическую ошибку, и я не вижу ее. Я хочу построить выбранный столбец в зависимости от условий.Заданная переменная внутри отборочного оператора

Msg 156, Level 15, State 1, Line 8
Неправильный синтаксис около ключевого слова 'SET'.

Msg 156, Level 15, State 1, Line 10
Неверный синтаксис рядом с ключевым словом «CASE».

ответ

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

Это добрые дела, за исключением того, что я получаю «No column name» – MrProgram

+0

Вы можете указать псевдоним этого столбца. Я обновил результат. –

1

Вы делаете это неправильно ... Попробуйте:

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 
Смежные вопросы