Conversione tipo di dato in Sql

di il
5 risposte

Conversione tipo di dato in Sql

Salve a chi mi legge.
Non ditemi che non ho studiato o che non abbia cercato abbastanza;
è possibile che quello che mi serve sia molto ben nascosto da qualche parte. Vengo al problema:

Io ho necessità di creare una tabella da una query (tipo query-union) agganciando campi da una tabella esistente in cui essi sono dichiarati "single", con altri campi numerici che aggiungo in sede di UNION.

Alla fine mi occorre che tutti i campi numerici siano di tipo "single" mentre ahimé quelli inseriti da me li ritrovo tutti "intero".
Ho provato e riprovato in mille modi ma non va.
il comando non accetta (a quanto pare) altro che i nomi di campo e lo zero, quando imposto...
SELECT year(now()) anno AS ANNO, 0 as IMPEGNO, 0 as NETTO, 0 as TOTALE.....ecc.

Sarò grato a quell'anima buona che può darmi un suggerimento su come risolvere il mio problema?

Ciao a tutti ANTONIO

5 Risposte

  • Re: Conversione tipo di dato in Sql

    Ciao Antonio,
    sai che non ho capito...ma dipende per certo da me...
    ci fai qualche esempio di quello che vuoi ottenere e magari ci mostri il codice della query che stai tentando di realizzare...?
    un saluto.
  • Re: Conversione tipo di dato in Sql

    Come sono definiti in Tabella...?
    Se è definito INTERO è ovvio che ti trovi INTERO...!

    Se vuoi un SINGLE, definirai:
    NUMERICO--->Precisione singola

    Premesso che non uso mai questo formato essendo affetto da errori di arrotondamento.

    La stringa SQL che ci invii non ci aiuta a capire..., l'unica cosa che devi verificare sono il FIELDTYPE della Tabella.
  • Re: Conversione tipo di dato in Sql

    Ciao.

    Secondo me dovresti definirli double, praticamente cosi:

    SELECT year(now()) anno AS ANNO, 0.00 as IMPEGNO, 0.00 as NETTO, 0.00 as TOTALE.....ecc.
  • Re: Conversione tipo di dato in Sql

    Floriano ha scritto:


    Ciao.

    Secondo me dovresti definirli double, praticamente cosi:

    SELECT year(now()) anno AS ANNO, 0.00 as IMPEGNO, 0.00 as NETTO, 0.00 as TOTALE.....ecc.
    Sei certo di quello che hai suggerito...?
    Ti potrebbe venire magari il dubbio che se il CAMPO in tabella fosse NUMERICO INTERO quello che proponi non ha senso...?
  • Re: Conversione tipo di dato in Sql

    Spero di non farvi sorridere per l'ingenuità che può scaturire da queste mie convinzioni. Passo a dettagliare:
    La query union aggancia campi provenienti da altre tabelle. In essa è possibile aggiungere anche nuovi campi ex novo.
    Alcuni campi della mia query union (Q1), provengono da una tabella esistente. Per questi ho già provveduto, dalla tabella di provenienza, a farli nascere come "single". Essi conterranno cifre in euro fino al massimo di 9.000,00 euro, pensavo di fare economia di byte.

    Altri campi ex novo (che più tardi entreranno in calcolo con i campi precedenti), dovranno essere ugualmente "single" proprio per non perdere l'arrotondamento dei cents a cui accennava Alex, ma purtroppo vengono inizializzati a “intero”.

    C'è da dire anche che la union non accetta nella sintassi i punti, le parentesi, i punti esclamativi...

    Una query di selezione successiva (Q2), mi farà il raggruppamento dei dati in funzione del campo “anno_contabile”.
    Una terza query (Q_Crea_Tabella), mi produrrà una tabella finale “Movimenti_Raggruppati” su cui l’automatismo farà i suoi bravi calcoli numerici.

    Tutto questo, anche se un po’ farraginoso, gira regolarmente e senza intoppi, ma succede che a causa dei campi “intero”, mi perdo i centesimi.
    Per questo motivo, mi premeva assegnare il giusto tipo ai campi nascenti già in fase di creazione.
    Dove, come, boh ????
    --------------------------------------------------------------------------------
    Query union (Q1)

    SELECT Year([data_mov]) AS Anno_contabile, 0 as IMPEG_prec, Sum(Movimenti.entrata) AS E_5, 0 as E_spo, 0 as E_ass, 0 as E_quo, 0 as U_acc, 0 as U_spesa, Movimenti.canale
    FROM Movimenti
    GROUP BY Year([data_mov]), Movimenti.canale
    HAVING (((Movimenti.canale)="5 x 1000"))
    ORDER BY Year([data_mov])


    UNION SELECT Year([data_mov]) AS Anno_contabile, 0 as IMPEG_prec, 0 as E_5, 0 as E_spo, 0 as E_ass, 0 as E_quo, Sum(Movimenti.acconto) as U_acc, Sum(Movimenti.spesa) as U_spesa, Movimenti.canale
    FROM Movimenti
    GROUP BY Year([data_mov]), Movimenti.canale;

    ------------------------------------------------------------------------
    Query di selezione (Q2)
    SELECT Q1.Anno_contabile, 0 AS NETTO_prec, 0 AS IMPEG_prec, 0 AS NETTO, 0 AS IMPEGNI, Sum(Q1.E_5) AS Tot_E_5, Sum(Q1.E_spo) AS Tot_E_Spo, Sum(Q1.E_ass) AS Tot_E_Ass, Sum(Q1.E_quo) AS ToT_E_Quo, 0 AS TOT_E, Sum(Q1.U_acc) AS Tot_acc, Sum(Q1.U_spesa) AS Tot_spesa
    FROM Q1
    GROUP BY Q1.Anno_contabile
    ORDER BY Q1.Anno_contabile;
    ---------------------------------------------------------------------------------------
    Query di creazione tabella (Q_Crea_Tabella)

    SELECT Q2.*, * INTO Movimenti_Raggruppati
    FROM Q2;
Devi accedere o registrarti per scrivere nel forum
5 risposte