Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
TSQL 2014 - COSA C'E' DI SBAGLIATO ?
mercoledì 12 dicembre 2018 - 11.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
Windows Server 2008 R2
|
SQL Server Express
Dony
Profilo
| Newbie
2
messaggi | Data Invio:
mer 12 dic 2018 - 11:45
Ciao a tutti,
sono anni che lavoro molto su MySQL ma ora mi trovo a dover creary delle Query su T-SQL 2014.
sicuramente mi manca qualche conoscenza di quest'ultimo, ma proprio non riesco a capire perchè nella riga LEFT JOIN dbo.ARTI_LISTINI l .. e solo in questa, a.CKY_ART da errore dicendo impossibile referenziare l'identificatore in più parti (riferito ad a a.CKY_ART), anche se lo identifico con il nome completo invece che con l'alias da lo stesso errore e non capisco cosa significa, di seguito la semplice query che genera l'errore
SELECT a.CKY_ART, c.CKY_CNT, p.NGB_LIS, l.CKY_ART , l.NPZ_LIS , p.NGB_CAT_CF_SCO
FROM dbo.ARTI a, dbo.RUDT c
LEFT JOIN dbo.PICO p on p.CKY_CNT=c.CKY_CNT
LEFT JOIN dbo.ARTI_LISTINI l on l.PRG_LISTINI =p.NGB_LIS AND l.CKY_ART= a.CKY_ART
WHERE a.CKY_ART='00' AND l.CKY_ART='00' AND c.CKY_CNT='501.00011'
ho guardato la guida di MS ( https://docs.microsoft.com/it-it/sql/relational-databases/errors-events/mssqlserver-4104-database-engine-error?view=sql-server-2017) ma non ho comunque risolto, anche perchè nella mia query è tutto referenziato e poi mi chiedo perchè solo in quella specifica riga non funziona ? nella SELECT c'è e non da problemi, nella clausola WHERE c'è e non da problemi, quindi ?
Grazie a chi mi può far capire, al momento io risolvo indicando nella clausola WHERE, sia a.CKY_ART='00' che l.CKY_ART='00', ma non mi sembra affatto una bella soluzione, in MySQL non mi è mai successo un problema del genere e neppure su oracle.
Saluti a tutti
AGGIORNO :
ho trovato la soluzione :) , semplicemente togliendo l'allias a dbo.ARTI funziona, ma sarei grato se qualcuno sapesse spiegarmi il perchè. Di seguito la query completa e funzionante, l'unico problema non risulto era l'uso dell'alias per dbo.ARTI
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT c.CKY_CNT AS MASTRO_CONTO, cast(SUBSTRING(c.CKY_CNT, 5, 5) AS INT) AS CODICE_CLIENTE, c.CDS_CNT_RAGSOC, dbo.ARTI.CKY_ART AS CODICE_ARTICOLO,dbo.ARTI.CDS_ART,
p.NGB_LIS AS TAB_LISTINO, l.NPZ_LIS as PREZZO_LISTINO , p.NGB_CAT_CF_SCO, vs.CKY_CATART AS CATEG_ART, l.NPZ_LIS as PREZZO_LISTINO, pz.NMP_PRZ_FIN_1 as PREZZO_CLIENTE,
vs.CSG_SCO_UNO AS SCONTO, IIF(pz.NMP_PRZ_FIN_1 IS NULL, (l.NPZ_LIS-(l.NPZ_LIS/100*vs.CSG_SCO_UNO)), pz.NMP_PRZ_FIN_1) AS PREZZO_FINALE
FROM dbo.ARTI
LEFT JOIN dbo.RUDT c ON c.CKY_CNT ='501.00011'
LEFT JOIN dbo.PICO p on p.CKY_CNT=c.CKY_CNT
LEFT JOIn dbo.ARTI_LISTINI l on l.PRG_LISTINI =p.NGB_LIS AND l.CKY_ART=dbo.ARTI.CKY_ART
LEFT JOIN dbo.AMAG_SCO_CLI vs on vs.NKY_CAT_CF_SCO=p.NGB_CAT_CF_SCO AND vs.CKY_CATART=ARTI.NGB_CAT_ART_SCO
LEFT JOIN dbo.PREZ pz on pz.CKY_ART= dbo.ARTI.CKY_ART AND pz.IST_TIPO_PREZ='P' AND pz.CKY_CNT_CLI=c.CKY_CNT
WHERE dbo.ARTI.CKY_ART='00' or dbo.ARTI.CKY_ART='13'
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
iif
Profilo
| Expert
713
messaggi | Data Invio:
mer 12 dic 2018 - 11:54
Prova a mettere AS davanti all'alias
Dony
Profilo
| Newbie
2
messaggi | Data Invio:
mer 12 dic 2018 - 12:05
Grazie, funziona mettendo AS a (dove a è alias).
pensa che ho quasi sempre usato AS anche in MysQL ma funziona ugualmente.
Non capisco però perchè solo in quel punto senza specificare AS a non funziona mentre in tutte le altre parti si ed inoltre tutti gli altri alias si.
riprenderò ad usare sempre AS d'ora in poi
la query finale con AS :
SELECT c.CKY_CNT AS MASTRO_CONTO, cast(SUBSTRING(c.CKY_CNT, 5, 5) AS INT) AS CODICE_CLIENTE, c.CDS_CNT_RAGSOC, a.CKY_ART AS CODICE_ARTICOLO,a.CDS_ART,
p.NGB_LIS AS TAB_LISTINO, l.NPZ_LIS as PREZZO_LISTINO , p.NGB_CAT_CF_SCO, vs.CKY_CATART AS CATEG_ART, l.NPZ_LIS as PREZZO_LISTINO, pz.NMP_PRZ_FIN_1 as PREZZO_CLIENTE,
vs.CSG_SCO_UNO AS SCONTO, IIF(pz.NMP_PRZ_FIN_1 IS NULL, (l.NPZ_LIS-(l.NPZ_LIS/100*vs.CSG_SCO_UNO)), pz.NMP_PRZ_FIN_1) AS PREZZO_FINALE
FROM dbo.ARTI as a
LEFT JOIN dbo.RUDT c ON c.CKY_CNT ='501.00011'
LEFT JOIN dbo.PICO p on p.CKY_CNT=c.CKY_CNT
LEFT JOIn dbo.ARTI_LISTINI l on l.PRG_LISTINI =p.NGB_LIS AND l.CKY_ART=a.CKY_ART
LEFT JOIN dbo.AMAG_SCO_CLI vs on vs.NKY_CAT_CF_SCO=p.NGB_CAT_CF_SCO AND vs.CKY_CATART=a.NGB_CAT_ART_SCO
LEFT JOIN dbo.PREZ pz on pz.CKY_ART= a.CKY_ART AND pz.IST_TIPO_PREZ='P' AND pz.CKY_CNT_CLI=c.CKY_CNT
WHERE a.CKY_ART='00' or a.CKY_ART='13'
GRAZIE ANCORA
iif
Profilo
| Expert
713
messaggi | Data Invio:
mer 12 dic 2018 - 12:10
Figurati
Torna su
Stanze Forum
Elenco Threads
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 !