martedì 8 maggio 2012

Ricalcolo saldi contabili ( Tasalsot )

La seguente query ricrea TASALSOT ( che quindi deve essere svuotato prima ).
La query è per SqlServer
Per gli altri db basta spostituire il funzione ISNULL con VALUE,NVL,IFNULL a seconda del db


INSERT INTO TASALSOT
SELECT CODICE,PIACON.SOTTOCONTO,
       ISNULL(LIRE.DARE,0) DARE,
       ISNULL(LIRE.AVERE,0) AVERE,
       ISNULL(LIRE.DAREINIT,0) DAREINIT,
       ISNULL(LIRE.AVEREINIT,0) AVEREINIT,
       ISNULL(LIRE.EDARE,0) EDARE,
       ISNULL(LIRE.EAVERE,0) EAVERE,
       ISNULL(LIRE.EDAREINIT,0) EDAREINIT,
       ISNULL(LIRE.EAVEREINIT,0) EAVEREINIT,
       DATULTMOV,
       NUMULTMOV
 FROM PIACON INNER JOIN ESC ON 1=1
LEFT OUTER JOIN (SELECT ESECOMPET,SOTTOCONTO,
                        SUM(CASE WHEN SEGNO='D' THEN IMPORTO ELSE 0 END) DARE,
                        SUM(CASE WHEN SEGNO='A' THEN IMPORTO ELSE 0 END) AVERE,
                        SUM(CASE WHEN SEGNO='D' AND TIPOCAUSAL='A' THEN IMPORTO ELSE 0 END) DAREINIT,
                        SUM(CASE WHEN SEGNO='A' AND TIPOCAUSAL='A' THEN IMPORTO ELSE 0 END) AVEREINIT,
                        SUM(CASE WHEN SEGNO='D' THEN EIMPORTO ELSE 0 END) EDARE,
                        SUM(CASE WHEN SEGNO='A' THEN EIMPORTO ELSE 0 END) EAVERE,
                        SUM(CASE WHEN SEGNO='D' AND TIPOCAUSAL='A' THEN EIMPORTO ELSE 0 END) EDAREINIT,
                        SUM(CASE WHEN SEGNO='A' AND TIPOCAUSAL='A' THEN EIMPORTO ELSE 0 END) EAVEREINIT,
                        MAX(DATAREG) DATULTMOV,
                        MAX(NUMERO) NUMULTMOV
                 FROM MOVCO 
                 WHERE SOSPESO_SN='N'
                 AND TEMPORA_SN='N'
                 AND SIMULAZ_SN='N'
                 AND SOLOANA_SN<>'S'
                 GROUP BY ESECOMPET,SOTTOCONTO) LIRE ON ESC.CODICE=LIRE.ESECOMPET AND PIACON.SOTTOCONTO=LIRE.SOTTOCONTO                 
                 ORDER BY ESC.CODICE,PIACON.SOTTOCONTO

Diritti in Oracle

Per concedere un certo diritto su una tabella ad un altro user/schema la sintassi è la seguente :
GRANT <diritto> ON  <tabella> TO < user>
GRANT SELECT ON PIACON TO DITTA1

mercoledì 4 aprile 2012

Esercizi su funzioni per date di SqlServer

Qui sotto c'è un esempio di due funzioni per la manipolazione di date su SQLServer


DATEADD aggiunge un valore ad una certa data
DATEDIFF restituisce la differenza fra due date
-------------------------------------------------------
select CODICE "Articolo", DESCRIZION "Descrizione", 
       substring(DATACREAZI,7,2)+'/'+substring(DATACREAZI,5,2)+'/'+substring(DATACREAZI,1,4) "Dt. Creazione", 
       DATEADD(year, 2, DATACREAZI) "Uscita produzione",
       substring(ULT_AGG,7,2)+'/'+substring(ULT_AGG,5,2)+'/'+substring(ULT_AGG,1,4) "Dt. Ult. Agg", 
       DATEDIFF(day, ULT_AGG, GETDATE()) "gg. dall'ult. aggiorn."
  FROM ANAMAGA
 WHERE STATO = 'S'
-------------------------------------------------------

"Uscita produzione":  2 anni successivi a DATACREAZI
"gg. dall'ult. aggiorn.":  differenza in giorni dal valore del campo ULT_AGG alla data odierna.


Grazie a Gianni per la ricerca

Riferimenti su web

  http://www.w3schools.com/sql/func_dateadd.asp
  http://www.sql-server-helper.com/tips/date-formats.aspx

giovedì 29 marzo 2012

Query per dati registro cespiti di prova

La query di cui sotto restituisce gli stessi dati ( a dir la verità mi mancano le rivalutazioni/svalutazioni ) che vengono stampati durante la stampa di prova del registro cespiti

Dopo la stampa definitiva, la query deve essere rivista.

La query estrae i dati dettagliati per cespite. E' sufficiente utilizzare i subtotali di Excel per totalizzare per Categoria

PS. La query è fatta per ORACLE ( la variazioni per altri db sono semplici ) 

------------- Inizio Testo Query -----------------------------------------------
select  
c.categoria,cat.descrizion,c.codice,c.descrizion,
substr(datainiamm,7,2)||'/'||substr(datainiamm,5,2)||'/'||substr(datainiamm,1,4) Data_Ini_Amm,
case 
when acq.datareg is not null then
  substr(acq.datareg,7,2)||'/'||substr(acq.datareg,5,2)||'/'||substr(acq.datareg,1,4) 
end
  Data_Acq,
c.numfatfor,
substr(c.datafatfor,7,2)||'/'||substr(c.datafatfor,5,2)||'/'||substr(c.datafatfor,1,4) data_fatt_for, 
nvl(acq.eimporto,0) imp_acq,

c.evaloreini costo_sto,c.ebaseammor base_amm,
c.eresiduoam-nvl(amm.eimporto,0) residuo_amm, c.eimpnonamm non_amm,
c.etotaleamm+nvl(amm.eimporto,0) fondo_amm,
nvl(ali.eimporto,0) ali_anno,
nvl(amm.eimporto,0) amm_anno,
c.eplusval-c.eminusval plus_min,

c.eresiduocv-nvl(amm.eimpammciv,0) residuo_amm_civ,
c.eplusciv-c.eminusciv plus_min_civ,
c.efondociv+nvl(amm.eimpammciv,0) fondo_civ,
nvl(amm.eimpammciv,0) amm_civ_anno,

nvl(ali.etotaleamm,0) ali_anno_tot_fondo,
nvl(ali.eimpammort,0) ali_tot_costo_storico,
nvl(ali.etotammciv,0) ali_anno_tot_fondo_civ,

c.evaloreini-nvl(ali.eimpammort,0) netto_ali_costo_sto,
c.etotaleamm+nvl(amm.eimporto,0)-nvl(ali.etotaleamm,0) netto_ali_fondo_amm,
c.efondociv+nvl(amm.eimpammciv,0)-nvl(ali.etotammciv,0) netto_ali_fondo_amm_civ,

nvl(amm.eimporto,0) importo_amm,
nvl(amm.eimpammciv,0) importo_amm_civ,
nvl(AMm.Percamm,0) pct_amm,
nvl(AMm.Perc_civ,0) pct_civ

from 
( select * from cespiti
 where 1=1
 and codice is not null
 and ( 
 (datainiamm < '2012')
   or
 (exists ( select 1 from movce m1 where m1.categoria=cespiti.categoria and m1.codcespite=cespiti.codice and tipomov='A' and esereg='2011') 
 ))
 and (
 (alienat_sn='N') or
 ( alienat_sn='S' and exists ( select 1 from movce m1 where m1.categoria=cespiti.categoria and m1.codcespite=cespiti.codice and tipomov='L' and esereg='2011')
  )

 )
) c 
inner join siglapp.catbeni cat on c.categoria=cat.codice
left outer join (
select * from movce where esereg='2011'
and tipomov='M') amm
on c.categoria=amm.categoria
and c.codice=amm.codcespite
left outer join (
select * from movce where esereg='2011'
and tipomov='L') ali
on c.categoria=ali.categoria
and c.codice=ali.codcespite

left outer join (
select * from movce where esereg='2011'
and tipomov='A') acq
on c.categoria=acq.categoria
and c.codice=acq.codcespite
order by c.categoria,c.codice
------------- Fine Testo Query -----------------------------------------------

mercoledì 8 febbraio 2012

Sigla non supporta Mysql 5.5

Mysql 5.5 non è supportato alla data odierna ( 08/02/2012 ) da Sigla++.

In fase di creazione di una tabella su Mysql, Sigla inserisce al termine dello statement SQL, la stringa TYPE=InnoDb

In MySql 5.5 tale opzione è stata sostituita con l'opzione ENGINE=InnoDb

Quindi in fase di creazione delle tabelle, Sigla si schianta.

giovedì 26 gennaio 2012

Backup Db2

La sintassi per effettuare il backup di un database di DB2 è il seguente : 


BACKUP DATABASE db [USER user USING password ] TO path

esempio

BACKUP DATABASE SIGLAP USER db2 USING db2 TO C:\COPIADB2


La sintassi completa è qui

venerdì 25 novembre 2011

Creazione Database Db2

Quando si crea un database con le ultime versioni di Db2 (9.7.4 Express), il sistema la crea per la regione Italia. 
In questo caso ci sono dei problemi su alcuni caratteri che non vengono riconosciuti e generano degli errori.
Per ovviare al problema è sufficiente specificare, durante la creazione del database, la regione Stati Uniti o altrimenti, da riga di comandi, lanciare il comando:

CREATE DATABASE DITTA2 AUTOMATIC STORAGE YES  ON 'C:\' DBPATH ON 'C:\' USING CODESET 1252 TERRITORY US COLLATE USING SYSTEM PAGESIZE 4096