0

我有以下查询,效果很好。我遇到的问题是,在两个表(和聚合联合表)中,都有一个名为 MTGUID 的字段。我需要将 MTGUID 乘以一个数字(假设为 1.35,以便于使用)并让它在 MTGUID 字段中返回该数字。我已经尝试了十几种方法来做到这一点,但没有任何东西可以打球。我可以为每个计算的价格创建一个新列,例如 (BKRETAIL.MTGUID * 1.35) AS MTG1,但我们有数万行专门使用 MTGUID 的代码。有任何想法吗?

我正在使用火鸟 SQL。

SELECT * FROM (  
SELECT BKRETAIL.* FROM BKRETAIL WHERE BKRETAIL.MKEY='SOMEKEY' 
UNION  SELECT BKWHOLESALE.* FROM BKWHOLESALE WHERE MKEY='SOMEKEY') 
ORDER BY  
case STATUS     
WHEN 'RT' then 1     
WHEN 'WH' then 2     
WHEN 'OL' then 3     
WHEN 'OD' then 4     
WHEN NULL then 5     
else 6  
end; 
4

3 回答 3

1

这个怎么样:

SELECT MTGUID * 1.35 as calculatedMTGUID, SUBSEL.* FROM (  
SELECT BKRETAIL.* FROM BKRETAIL WHERE BKRETAIL.MKEY='SOMEKEY' 
UNION  SELECT BKWHOLESALE.* FROM BKWHOLESALE WHERE MKEY='SOMEKEY') SUBSEL
ORDER BY  
case STATUS     
WHEN 'RT' then 1     
WHEN 'WH' then 2     
WHEN 'OL' then 3     
WHEN 'OD' then 4     
WHEN NULL then 5     
else 6  
end; 
于 2011-09-08T16:46:52.743 回答
0

试试这个

SELECT MTGUID  * 1.35 AS MTGUID,<list rest OF COLUMNS here> 
FROM (  
SELECT BKRETAIL.* FROM BKRETAIL WHERE BKRETAIL.MKEY='SOMEKEY' 
UNION  SELECT BKWHOLESALE.* FROM BKWHOLESALE WHERE MKEY='SOMEKEY') 
ORDER BY  
case STATUS     
WHEN 'RT' then 1     
WHEN 'WH' then 2     
WHEN 'OL' then 3     
WHEN 'OD' then 4     
WHEN NULL then 5     
else 6  
end; 
于 2011-09-07T16:06:55.773 回答
0

一种选择是MTGUID用计算的列替换原始列,即

  • 重命名表中的原始MTGUID列;
  • 使用;添加MTGUID具有所需表达式的新列COMPUTED BY (expr)

这样做的好处是您不必更改 SQL 语句,缺点是您必须在许多地方维护表达式(所有具有该列的表)。当然,需要原始 MTGUID 值的查询必须更新以使用重命名的列,但如果此类语句的数量明显减少,则值得麻烦。

我认为更好的解决方案是将所有这些东西“隐藏”在视图后面,但这需要提醒您的 SQL 查询......

于 2011-09-09T09:14:43.907 回答