首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少此查询中的代码冗余?

如何减少此查询中的代码冗余?
EN

Stack Overflow用户
提问于 2015-05-14 01:52:24
回答 1查看 103关注 0票数 1

我的查询中有以下两个计算字段:

代码语言:javascript
复制
CASE
    WHEN TRN.TOTAL_VALUE_T = 0 THEN '00000000000'
    ELSE
        CASE
            WHEN CC.PORT_CURRENCY1 = 'CAD' THEN RIGHT('00000000000' + REPLACE(LTRIM(STR(TRN.TOTAL_VALUE_T + TRN.TAXES, 11, 2)), '.', ''), 11) 
            WHEN CC.PORT_CURRENCY1 = 'USD' THEN RIGHT('00000000000' + REPLACE(LTRIM(STR((TRN.TOTAL_VALUE_T + TRN.TAXES) * DBO.fnGetExchangeRate(TRN.TRADE_DATE, 'USD', 'CAD'), 11, 2)), '.', ''), 11)
    END
END AS TX_PRIX_CAD,

CASE 
    WHEN T.TRANS_TYPE in ('ADD','DELIV') THEN
        CASE
            WHEN (SELECT currencyTitle FROM DBO.GetPrice(TRN.SEC_NO, TRN.TRADE_DATE)) = '' THEN TX_PRIX_CAD 
        END
END AS TX_MNT_BRUT

您知道,在某些条件下,第二个字段(TX_MNT_BRUT)必须等于第一个字段(TX_PRIX_CAD)。

这样做的问题是SQL告诉我TX_PRIX_CAD不是一个有效的列名,我猜是因为该列名实际上不存在于表中。

如何才能在不重复TX_MNT_BRUT中的TX_PRIX_CAD代码的情况下实现这一点?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-20 23:20:03

您可能需要嵌套select语句,例如

代码语言:javascript
复制
SELECT <other_columns>, TX_PRIX_CAD, 
CASE 
WHEN T.TRANS_TYPE in ('ADD','DELIV') THEN
    CASE
        WHEN (SELECT currencyTitle FROM DBO.GetPrice(TRN.SEC_NO, TRN.TRADE_DATE)) = '' THEN TX_PRIX_CAD 
    END
END AS TX_MNT_BRUT
FROM (

    SELECT 
    <other columns>,
    CASE
        WHEN TRN.TOTAL_VALUE_T = 0 THEN '00000000000'
    ELSE
        CASE
            WHEN CC.PORT_CURRENCY1 = 'CAD' THEN RIGHT('00000000000' + REPLACE(LTRIM(STR(TRN.TOTAL_VALUE_T + TRN.TAXES, 11, 2)), '.', ''), 11) 
            WHEN CC.PORT_CURRENCY1 = 'USD' THEN RIGHT('00000000000' + REPLACE(LTRIM(STR((TRN.TOTAL_VALUE_T + TRN.TAXES) * DBO.fnGetExchangeRate(TRN.TRADE_DATE, 'USD', 'CAD'), 11, 2)), '.', ''), 11)
        END 
    END
    END AS TX_PRIX_CAD,
    T.TRANS_TYPE
    FROM <table_name>
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30222019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档