SQL Server:如何为case语句使用手动定义的列名
我使用以下Select作为更大查询的一部分 这里有人能告诉我如何在我的案例陈述中引用手动定义的名称“SQL Server:如何为case语句使用手动定义的列名,sql,sql-server,stored-procedures,case,Sql,Sql Server,Stored Procedures,Case,我使用以下Select作为更大查询的一部分 这里有人能告诉我如何在我的案例陈述中引用手动定义的名称“amountUSD”吗? 在尝试以这种方式保存时,我总是遇到以下错误: “列名'amountUSD'无效。” 解决方法可能是首先将其插入临时表,但我希望可以避免这种情况 SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate, (R.amount
amountUSD
”吗?
在尝试以这种方式保存时,我总是遇到以下错误:
“列名'amountUSD'无效。
”
解决方法可能是首先将其插入临时表,但我希望可以避免这种情况
SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate,
(R.amount * E.exchange_rate) AS amountUSD,
(
CASE WHEN amountUSD < 1000 THEN '18'
WHEN amountUSD < 5000 THEN '25'
WHEN amountUSD < 20000 THEN '27'
WHEN amountUSD < 100000 THEN '28'
WHEN amountUSD < 250000 THEN '29'
WHEN amountUSD < 2000000 THEN '30'
WHEN amountUSD < 5000000 THEN '31' END
) AS approvalLevel
FROM Exchange_Rates E
WHERE E.from_currency = R.currency
AND E.to_currency = 'USD'
FOR XML PATH(''), ELEMENTS, TYPE
选择(R.currency='USD'然后是'1'的情况,否则E.exchange\U汇率结束)作为汇率,
(R.金额*E.汇率)为美元,
(
如果金额小于1000美元,则为“18”
当金额小于5000美元时,则为“25”
当金额小于20000美元时,则为“27”
当金额小于100000美元时,则为“28”
当金额小于250000美元时,则为'29'
当金额小于2000000美元时,则为“30”
当金额小于5000000美元时,“31”结束
)作为认可级别
从汇率E
其中E.from_currency=R.currency
E.to_货币=‘美元’
对于XML路径(“”),元素,键入
非常感谢您在这方面的帮助,蒂姆。您不能,因为amountUSD目前不存在。它只存在于输出投影中。您有两种选择:
- 不使用美元或美元
- 不要使用您的表,而是进行两步查询,首先是project amountUSD,然后选择它并在那里进行案例(approvalLevel)
这并不像听起来那么难,因为你可以选择另一个选择。你不能-因为amountUSD此时不存在。它只存在于输出投影中。您有两种选择:
- 不使用美元或美元
- 不要使用您的表,而是进行两步查询,首先是project amountUSD,然后选择它并在那里进行案例(approvalLevel)
SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate,
(R.amount * E.exchange_rate) AS amountUSD,
(
CASE WHEN (R.amount * E.exchange_rate) < 1000 THEN '18'
WHEN (R.amount * E.exchange_rate) < 5000 THEN '25'
WHEN (R.amount * E.exchange_rate) < 20000 THEN '27'
WHEN (R.amount * E.exchange_rate) < 100000 THEN '28'
WHEN (R.amount * E.exchange_rate) < 250000 THEN '29'
WHEN (R.amount * E.exchange_rate) < 2000000 THEN '30'
WHEN (R.amount * E.exchange_rate) < 5000000 THEN '31' END
) AS approvalLevel
FROM Exchange_Rates E
WHERE E.from_currency = R.currency
AND E.to_currency = 'USD'
FOR XML PATH(''), ELEMENTS, TYPE
选择(R.currency='USD'然后是'1'的情况,否则E.exchange\U汇率结束)作为汇率,
(R.金额*E.汇率)为美元,
(
当(R.金额*E.汇率)<1000时,则为'18'
当(R.金额*E.汇率)<5000时,则为“25”
当(R.金额*E.汇率)<20000时,则为“27”
当(R.金额*E.汇率)<100000时,则为'28'
当(R.金额*E.汇率)<250000时,则为'29'
当(R.金额*E.汇率)<2000000时,则为“30”
当(R.金额*E.汇率)<5000000时,则“31”结束
)作为认可级别
从汇率E
其中E.from_currency=R.currency
E.to_货币=‘美元’
对于XML路径(“”),元素,键入
这行吗
SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate,
(R.amount * E.exchange_rate) AS amountUSD,
(
CASE WHEN (R.amount * E.exchange_rate) < 1000 THEN '18'
WHEN (R.amount * E.exchange_rate) < 5000 THEN '25'
WHEN (R.amount * E.exchange_rate) < 20000 THEN '27'
WHEN (R.amount * E.exchange_rate) < 100000 THEN '28'
WHEN (R.amount * E.exchange_rate) < 250000 THEN '29'
WHEN (R.amount * E.exchange_rate) < 2000000 THEN '30'
WHEN (R.amount * E.exchange_rate) < 5000000 THEN '31' END
) AS approvalLevel
FROM Exchange_Rates E
WHERE E.from_currency = R.currency
AND E.to_currency = 'USD'
FOR XML PATH(''), ELEMENTS, TYPE
选择(R.currency='USD'然后是'1'的情况,否则E.exchange\U汇率结束)作为汇率,
(R.金额*E.汇率)为美元,
(
当(R.金额*E.汇率)<1000时,则为'18'
当(R.金额*E.汇率)<5000时,则为“25”
当(R.金额*E.汇率)<20000时,则为“27”
当(R.金额*E.汇率)<100000时,则为'28'
当(R.金额*E.汇率)<250000时,则为'29'
当(R.金额*E.汇率)<2000000时,则为“30”
当(R.金额*E.汇率)<5000000时,则“31”结束
)作为认可级别
从汇率E
其中E.from_currency=R.currency
E.to_货币=‘美元’
对于XML路径(“”),元素,键入
选择列表中amountUSD不可用的原因是查询处理的逻辑顺序:
我相信下面的代码是TomTom描述的可能的解决方案之一
SELECT *
,(CASE WHEN amountUSD < 1000 THEN '18'
WHEN amountUSD < 5000 THEN '25'
WHEN amountUSD < 20000 THEN '27'
WHEN amountUSD < 100000 THEN '28'
WHEN amountUSD < 250000 THEN '29'
WHEN amountUSD < 2000000 THEN '30'
WHEN amountUSD < 5000000 THEN '31' END
) AS approvalLevel
FROM
(
SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate,
(R.amount * E.exchange_rate) AS amountUSD,
FROM Exchange_Rates E
WHERE E.from_currency = R.currency
AND E.to_currency = 'USD'
) t
FOR XML PATH(''), ELEMENTS, TYPE
选择*
,(如果金额小于1000美元,则为'18'
当金额小于5000美元时,则为“25”
当金额小于20000美元时,则为“27”
当金额小于100000美元时,则为“28”
当金额小于250000美元时,则为'29'
当金额小于2000000美元时,则为“30”
当金额小于5000000美元时,“31”结束
)作为认可级别
从…起
(
选择(R.currency=美元,然后选择1,否则E.exchange\U汇率结束)作为汇率,
(R.金额*E.汇率)为美元,
从汇率E
其中E.from_currency=R.currency
E.to_货币=‘美元’
)t
对于XML路径(“”),元素,键入
选择列表中amountUSD不可用的原因是查询处理的逻辑顺序:
我相信下面的代码是TomTom描述的可能的解决方案之一
SELECT *
,(CASE WHEN amountUSD < 1000 THEN '18'
WHEN amountUSD < 5000 THEN '25'
WHEN amountUSD < 20000 THEN '27'
WHEN amountUSD < 100000 THEN '28'
WHEN amountUSD < 250000 THEN '29'
WHEN amountUSD < 2000000 THEN '30'
WHEN amountUSD < 5000000 THEN '31' END
) AS approvalLevel
FROM
(
SELECT (CASE WHEN R.currency = 'USD' THEN '1' ELSE E.exchange_rate END) AS exchangeRate,
(R.amount * E.exchange_rate) AS amountUSD,
FROM Exchange_Rates E
WHERE E.from_currency = R.currency
AND E.to_currency = 'USD'
) t
FOR XML PATH(''), ELEMENTS, TYPE
选择*
,(如果金额小于1000美元,则为'18'
当金额小于5000美元时,则为“25”
当金额小于20000美元时,则为“27”
当金额小于100000美元时,则为“28”
当金额小于250000美元时,则为'29'
当金额小于2000000美元时,则为“30”
当金额小于5000000美元时,“31”结束
)作为认可级别
从…起
(
选择(R.currency=美元,然后选择1,否则E.exchange\U汇率结束)作为汇率,
(R.金额*E.汇率)为美元,
从汇率E
其中E.from_currency=R.currency
E.to_货币=‘美元’
)t
对于XML路径(“”),元素,键入
基本上,除非您将转换重写为公共表express