Domanda

Ho la seguente domanda, che funziona alla grande. Il problema che ho è che in entrambe le tabelle (e la tabella unionaria aggregata) c'è un campo chiamato mtguid. Devo moltiplicare Mtguid per un numero (diciamo 1,35, per facilità d'uso) e fargli restituire quel numero nel campo mtguid. Ho provato una dozzina di modi per farlo e non riesco a fare nulla per giocare a palla. Posso creare una nuova colonna per ciascun prezzo calcolato, come (bkretail.mtguid * 1.35) come mtg1, ma abbiamo decine di migliaia di righe di codice che usano specificamente MTguid. Qualche idea?

Sto usando 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; 
È stato utile?

Soluzione

Cosa ne pensi di questo:

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; 

Altri suggerimenti

prova questo

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; 

Un'opzione sarebbe quella di sostituire l'originale MTGUID colonna con una calcolata, cioè

  • rinominare l'originale MTGUID colonna nella tabella (s);
  • aggiungere nuova MTGUID colonna con espressione desiderata usando COMPUTED BY (expr);

Il vantaggio di questo è che non è necessario modificare le tue dichiarazioni SQL, lo svantaggio è che devi mantenere l'espressione in molti luoghi (tutte le tabelle che hanno la colonna). Naturalmente, le query che richiedono il valore MTGuid originale devono essere aggiornate per utilizzare la colonna Rinomina, ma se il numero di tali affermazioni è significativamente inferiore, potrebbe valere la pena.

Penso che una soluzione migliore sarebbe quella di "nascondere" tutte queste cose dietro una vista, ma ciò richiede di avvisare le tue query SQL ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top