带有 case 语句和表连接的 SQL 计算列

标签 sql sql-server-2008 case

好的,我已经进行了一些网络挖掘,但似乎无法找到如何使这种情况起作用,或者即使有可能。

我正在使用 SQL Server 2008 并有一个计算列,我试图在其中计算一些有关外币汇率的值。

尽管从长远来看,一张表可能更容易,但我想使用涉及两个不同表的正确解决方案。

t1包含交易日志。表t2包含给定货币的基本信息。可以使用 currencyCode 连接这两个表属性。

粘性部分带有货币相关计算。目前,计算仅对 CR1 有所不同。 CR2 CR3CR4但 future 随着更多货币的加入,新货币可能会有所不同。所以理想情况下,一个新行将被添加到 t2和一个位标志( flagCurrencyCalc )设置,指定使用或不使用替代计算。

所以现在的公式看起来像这样:

(case when [currencyCode]='CR1' OR [currencyCode]='CR2' OR [currencyCode]='CR3' OR [currencyCode]='CR4' then (formula1) else (formula2) end)

如您所见,我必须手动进入并通过添加另一个带有新货币代码的 OR 语句来更改公式。

是否有可能按照以下方式做一些事情:
(case when t2.flagCurrencyCalc=True对于在 t1 中找到的记录中的给定货币代码 then (formula1) else (formula2) end)
???

最佳答案

您不能直接访问计算列中的另一个表(请参阅 here )。

这里有一些选项。

您可以使用 in 简化您的公式:

(case when currencyCode in ('CR1', 'CR2', 'CR3', 'CR4')
      then (formula1)
      else (formula2)
 end)

您可以使用 View :
create view vw_tablename as
    select t.*,
           (case when currencyCode in (select currencyCode from ListOfCurrencies where . . . )
                 then (formula1)
                 else (formula2)
            end)
    from t;

您可以定义一个函数来检查货币。

关于带有 case 语句和表连接的 SQL 计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240787/

相关文章:

mysql - 查询从一个表和一个额外的列检索信息,这是另一个表的条件

crash - Erlang:异常的 case_clause 崩溃

sql - 执行动态生成的 T-Sql 函数

asp.net - 当多个用户从 asp 成员(member)身份登录时,如何将用户名放入 sql 触发器中

sql - 处理 if a>b 的最佳方法

mysql - 如何在另一个子查询中编写子查询?

mysql - Insert table into another table conditionally - insert into select 案例

sql - 如何在SQL中添加统计值

sql - SQL查找彼此在1分钟内发生的重复记录

sql - 在 phpMyAdmin 中实现下拉菜单