我正在制作一个程序,我想改进这部分。
IF(Currency) BEGIN
SELECT ISNULL(SUM(Amount / ExchangeRate), 0.00)
FROM SomeTables
WHERE SomeConditions
END
ELSE BEGIN
SELECT ISNULL(SUM(Amount * ExchangeRate), 0.00)
FROM SomeTables
WHERE SomeConditions
END
问题是,如果货币是美元,那么我必须分开,否则我必须乘以。查询涉及六个表和许多条件,因此它是25行,我不想在IF条件内重复代码。我想在开头定义运算符并在查询中使用它(我的意思是一个SELECT)。这只是改善目的......
关于如何解决它的一些想法?提前谢谢。
答案 0 :(得分:2)
您可以使用CASE WHEN THEN
,也许是这样:
SELECT ISNULL (CASE WHEN Currency
THEN SUM(Amount / ExchangeRate)
ELSE SUM(Amount * ExchangeRate)
END,
0.00 ) LocalCurrency
FROM SomeTables
etc.
这将允许您只使用一个SELECT语句,这是一个有用的简化。
答案 1 :(得分:0)
你可以试试这个:
SELECT ISNULL (CASE WHEN Currency = 'USD'
THEN SUM(Amount / ExchangeRate)
ELSE SUM(Amount * ExchangeRate)
END, 0.00 ) TotalAmount
FROM SomeTables
WHERE SomeConditions
答案 2 :(得分:-1)
利用动态查询。根据@Operator中的货币存储要使用的运算符
SET @Query = 'SELECT ISNULL(SUM(Amount ' + @Operator + ' ExchangeRate), 0.00)
FROM SomeTables
WHERE SomeConditions'
EXEC SP_EXECUTESQL @Query