Correzione codice sql

martedì 27 maggio 2008 - 15.34

trinity Profilo | Guru

ciao ragazzi,
mi potete dire dove sbaglio in questo codice sql?

Insert Into #Tab_temp (prov,ArrIta,prov1,ParIta,naz,arrstr,naz1,parstr) (SELECT * FROM (select provincia AS prov,movimenti AS ArrIta from #Tab_temp1 where codstato=0 and stato='A')AS A Left JOIN (select provincia AS prov1,movimenti AS ParIta from #Tab_temp1 where codstato=0 and stato='P')As B Left JOIN (select nazione AS naz,movimenti AS arrstr from #Tab_temp1 where codstato<>0 and stato='A')As A Left JOIN (select nazione AS naz1,movimenti AS parstr from #Tab_temp1 where codstato<>0 and stato='P')As B ON A.naz = B.naz1 AND A.prov = B.prov1)

il messaggio di errore è il seguente:
Messaggio 102, livello 15, stato 1, procedura Stampe, riga 139
Sintassi non corretta in prossimità di ')'.

Grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Brainkiller Profilo | Guru

>ciao ragazzi,
>mi potete dire dove sbaglio in questo codice sql?

Ciao,
non so se può essere la causa ma vedo che hai fatto 2 volte AS 'A' e 2 volte AS 'B' nei JOIN.
Prova a metterle come A,B,C,D e modifica poi la WHERE.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

alx_81 Profilo | Guru

>ciao ragazzi,
Ciao!

>mi potete dire dove sbaglio in questo codice sql?
Ecco gli errori che vedo:
1) La parentesi che racchiude la select sotto la insert non ci vuole
2) gli alias sono ripetuti (come dice Brainkiller)
3) mancano tutte le clausole di ON per ogni LEFT JOIN (devi definire il criterio di legame per ogni join, non puoi farne uno in fondo e stop)

Detto questo, prova ad illustrarci cosa vuoi ottenere, perchè non mi sembra che tu abbia seguito la strada migliore

>Grazie
di nulla!
Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

Ok allora cercherò di spiegare il tutto.

Ho una tabella temporanea costituita dalle seguenti colonne:

Movimenti Int
CodStato Int
Nazione Varchar
Provincia Varchar
TipoMov Varchar

la colonna tipomov può essere valorizzata solamente dai seguenti dati: A (sta per arrivato) o P (sta per partito)

pertanto un esempio di record potrebbe essere questo in foto:

314x197 17Kb


ps il codice per riempire questa tabella funziona.

Visto questo esempio passo a spiegarvi meglio cosa mi serve come risultato finale.
Partendo dalla tabella appena citata io con codice sql devo prendere i dati e salvarli in un'altra tabella temporanea costituita dalle seguenti colonne:

CREATE TABLE #Tab_Temp
(
Prov Varchar(250),
ArrIta Int,
ParIta Int,
Naz Varchar(250),
ArrStr Int,
ParStr Int
)

in sostanza dovrebbe uscire una cosa del genere vedete la foto di seguito riportata:


314x100 10Kb


come potrei fare?

ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>come potrei fare?
perchè GERMANIA è in corrispondenza di Latina? che legame c'è?
Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

scus ami sono sbagliato deve andare di seguito in accodamento
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>scus ami sono sbagliato deve andare di seguito in accodamento
Prova a dare un'occhiata a questo esempio:

USE tempdb; GO CREATE TABLE #TempTableSource ( Movimenti Int , CodStato Int , Nazione Varchar(30) , Provincia Varchar(30) , TipoMov Varchar(30) ) GO CREATE TABLE #Tab_Temp ( Prov Varchar(250) , ArrIta Int , ParIta Int , Naz Varchar(250) , ArrStr Int , ParStr Int ) GO INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (15, 0, 'Italia', 'Teramo', 'A') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (30, 0, 'Italia', 'Latina', 'A') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (30, 0, 'Italia', 'Roma', 'A') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (30, 7, 'Germania', '', 'A') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (15, 0, 'Italia', 'Roma', 'P') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (15, 0, 'Italia', 'Teramo', 'P') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (15, 7, 'Germania', '', 'P') INSERT INTO #TempTableSource (Movimenti, CodStato, Nazione, Provincia, TipoMov) VALUES (25, 0, 'Italia', 'Latina', 'P') GO SELECT Nazione , Provincia , ArrIta = SUM(T.ArriviItalia) , ParIta = SUM(T.PartenzeItalia) , ArrStr = SUM(T.ArriviEstero) , ParStr = SUM(T.PartenzeEstero) FROM ( SELECT PartenzeItalia = CASE WHEN TipoMov = 'P' THEN Movimenti ELSE 0 END , ArriviItalia = CASE WHEN TipoMov = 'A' THEN Movimenti ELSE 0 END , PartenzeEstero = 0 , ArriviEstero = 0 , Nazione , Provincia FROM #TempTableSource WHERE CodStato = 0 UNION ALL SELECT PartenzeItalia = 0 , ArriviItalia = 0 , PartenzeEstero = CASE WHEN TipoMov = 'P' THEN Movimenti ELSE 0 END , ArriviEstero = CASE WHEN TipoMov = 'A' THEN Movimenti ELSE 0 END , Nazione , Provincia FROM #TempTableSource WHERE CodStato <> 0 ) T GROUP BY Nazione , Provincia DROP TABLE #TempTableSource DROP TABLE #Tab_Temp GO

Ciao!
Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

Grazie mille il codice funge.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5