Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何为case语句使用手动定义的列名_Sql_Sql Server_Stored Procedures_Case - Fatal编程技术网

SQL Server:如何为case语句使用手动定义的列名

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

我使用以下Select作为更大查询的一部分

这里有人能告诉我如何在我的案例陈述中引用手动定义的名称“
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