Question

I have the following query, which works great. The problem I have is that in both tables (and the aggregate unioned table), there is a field called MTGUID. I need to multiply MTGUID by a number (let's say 1.35, for ease of use) and have it return that number in the MTGUID field. I have tried a dozen ways to do this and can't get anything to play ball. I can create a new column for each calculated price, like (BKRETAIL.MTGUID * 1.35) AS MTG1, but we've got tens of thousands of lines of code that specifically use MTGUID. Any ideas?

I'm using Firebird 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; 
Was it helpful?

Solution

How about this:

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; 

OTHER TIPS

try this

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; 

One option would be to replace the original MTGUID column with computed one, ie

  • rename the original MTGUID column in table(s);
  • add new MTGUID column with desired expression using COMPUTED BY (expr);

Advantage of this is that you don't have to alter your SQL statements, disadvantage is that you have to maintain the expression in many places (all the tables which have the column). Of course, the queries which need the original MTGUID value must be updated to use the renamed column, but if the number of such statements is significantly lower it could be worth the trouble.

I think a better solution would be to "hide" all this stuff behind a view but this requires alerting your SQL queries...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top