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

时间:2015-05-13 17:52:24

标签: sql sql-server-2005

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

change.setOnClickListener(new Button.OnClickListener() { 
    public void onClick(final View v) {
        v.setBackgroundResource(R.drawable.button_orange);
        Handler handle = new Handler(); // Probably shouldn't create one each time, but here is the idea
        handle.postDelayed(new Runnable() {
            @Override
            public void run() {
                v.setBackgroundResource(R.drawable.button_green);
            }
        }, 5000);
    } 
}); 

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

这样做的问题是SQL告诉我TX_PRIX_CAD不是有效的列名,我猜是因为列名在表中不存在。

如何在不重复TX_MNT_BRUT中TX_PRIX_CAD的代码的情况下实现此目的?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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>
)