【问题标题】: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