QRY SU DUE TABELLE CORRELATE.

mercoledì 28 marzo 2007 - 16.22

interesse Profilo | Newbie

Buongiorno,
ho uno spinoso problema che vorrei porVi; premetto che la domanda (ai + esperti)potrebbe sembrare banale:
ho necessità di eseguire una Query di selezione tra una tabella variabile e due tabelle in cui sono riversati i listini prezzi di due fornitori.

La funzione dovrebbe verificare quanto segue: se il codice(ItemId) inserito da un utente nella tabella "ITEMID" non è presente nella tabella "INTERO" si dovrebbe ricercarlo nell'altra tabella "INTEROHI" ed ovviamente presentare la query con le informazioni del prodotto nei restanti campi prelevati dalla tabella in cui il codice è presente.
Supponiamo di avere una query con definiti 4 campi "ItemId, Parts, Price, List ". In una tabella primaria "ITEMID" viene inserito il codice "ItemId" e tramite la query incriminata viene creata una nuova tabella "ITEMQXT" con i dati relativi a quell codice "ItemId" (non è così semplice in realtà ci sono altri campi con sconti, quantità e commenti che vengono modificati dall'utente in fase di inserimento...ma l'informazione che mi serve è indipendente da questi altri dati).
Premesso questo la query funziona bene con una sola tabella "INTERO" (ovvero preleva i dati e mi crea la seconda tabella riempiendo i restanti campi se il codice esiste altrimenti riporta il codice "ItemId" inserito e con i restanti campi vuoti)... ora il mio problema è questo:
ho necessità che gli "ItemId" non presenti nella tabella "INTERO" vengano ricercati nella tabella "INTEROHI" e quindi se presenti vengano inseriti tutti i dati relativi, se non presenti i dati mi dovrebbe riportare l'ItemId inserito dall'utente con i restanti campi vuoti. Intuitivamente ho scritto nel campo "Parts" (il secondo campo) questa espressione che poi dovrei ripetere negli altri"2"campi ...

Espr1: IIf((SELECT INTERO.PART FROM (ITEMID LEFT JOIN INTERO ON ITEMID.[ITEM ID] = INTERO.ITEM) LEFT JOIN INTEROHI ON ITEMID.[ITEM ID] = INTEROHI.[ITEM ID]
ORDER BY ITEMID.SCORE) like '';
(SELECT INTEROHI.PARTS FROM (ITEMID LEFT JOIN INTERO ON ITEMID.[ITEM ID] = INTERO.ITEM) LEFT JOIN INTEROHI ON ITEMID.[ITEM ID] = INTEROHI.[ITEM ID]
ORDER BY ITEMID.SCORE);
(SELECT INTERO.PART FROM (ITEMID LEFT JOIN INTERO ON ITEMID.[ITEM ID] = INTERO.ITEM) LEFT JOIN INTEROHI ON ITEMID.[ITEM ID] = INTEROHI.[ITEM ID]
ORDER BY ITEMID.SCORE))

ho avuto necessità di ripetere i "join" diversamente l'espressione tirava fuori + record e andava in errore... Con l'espressione riportata sopra riesco a far comparire i dati solo se l' "ItemId" è presente nella prima tabella "INTERO" cioè se l'espressione è falsa.

... ed è 24 ore che cerco invano... Grazie per la risposta che sicuramente sarà per voi molto ovvia.

Lorenzo Galasso

bluland Profilo | Guru

Ciao,
per aiutarci a capire meglio potresti postare la struttura delle tabelle con qualche esempio di insert?
su che db lavori?

saluti
--------------------
Vincenzo PESANTE
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