Valori null nella vista

martedì 04 gennaio 2011 - 16.33
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows XP  |  Visual Studio 2008  |  SQL Server 2005

Zagor60 Profilo | Junior Member

salve,
in una vista ho diverse viste collegate, di cui una è la sottostante.
Premetto che ta tabella tabfatture può anche non essere compilata.
Essendo questa non compilata , tutte le altre viste mi danno come risultato "vuoto".
Come posso ovviare a questo problema , nel senso che se la tabella tabfattura sia vuota , le altre mi diano di valiri?

Grazie

codice vista_cst:
SELECT ISNULL(SUM(dbo.TabFatture.totale), 0) AS TotCST, dbo.TabViaggi.n_vg, dbo.TabViaggi.nave
FROM dbo.TabFatture INNER JOIN
dbo.TabViaggi ON dbo.TabFatture.n_vg = dbo.TabViaggi.n_vg AND dbo.TabFatture.nave = dbo.TabViaggi.nave
WHERE (dbo.TabFatture.Tipo = 'CONTROSTALLIE')
GROUP BY dbo.TabViaggi.n_vg, dbo.TabViaggi.nave

--
codice della vista completa:
SELECT dbo.TabViaggi.n_vg, dbo.TabViaggi.nave, dbo.TabViaggi.dati_vg, dbo.TabViaggi.porto_prov, dbo.TabViaggi.data_inizio, dbo.TabViaggi.fine_vg,
dbo.TabViaggi.data_fine, dbo.TabViaggi.ore_fuorifitto, dbo.TabViaggi.data_polizza, dbo.TabViaggi.noleggiatore, dbo.TabViaggi.prodotto,
dbo.TabViaggi.peso, dbo.TabViaggi.note, dbo.Vista_TotFO.totaleFO, dbo.Vista_TotGO.totaleGO, dbo.Vista_TotPrevisione.totalePrevisione,
dbo.Tabnave.idnave1, dbo.Vista_NOLO.TotBrokerNolo, dbo.Vista_CST.TotBrokerCST, dbo.Vista_FattNolo.TotNolo, dbo.Vista_FattCST.TotCST,
dbo.Vista_TotEsborsi.totesborsi, dbo.TabViaggi.definitivo
FROM dbo.TabViaggi INNER JOIN
dbo.Tabnave ON dbo.TabViaggi.n_vg = dbo.Tabnave.n_vg AND dbo.TabViaggi.nave = dbo.Tabnave.Nave CROSS JOIN
dbo.Vista_TotFO CROSS JOIN
dbo.Vista_TotGO CROSS JOIN
dbo.Vista_NOLO CROSS JOIN
dbo.Vista_CST CROSS JOIN
dbo.Vista_TotPrevisione CROSS JOIN
dbo.Vista_FattNolo CROSS JOIN
dbo.Vista_FattCST CROSS JOIN
dbo.Vista_TotEsborsi

speedx Profilo | Junior Member

Se metti una INNER JOIN ovviamente non avrai il dato che cerchi se non sono presenti gli stessi valori per le chiavi di join.
Una possibilita e' mettere una LEFT JOIN che prende sicuramente tutti i record della prima tabella (che non deve essere quella delle fatture) e se presenti anche i dati delle fatture.

Si scrive così

SELECT....
FROM TabNoFatt
LEFT JOIN TabFat
ON TabNoFatt.Campo1 = TabFat.Campo1
.....

ecc

//// Marcello C.

alx_81 Profilo | Guru

>salve,
ciao

>in una vista ho diverse viste collegate, di cui una è la sottostante.
>Premetto che ta tabella tabfatture può anche non essere compilata.
>Essendo questa non compilata , tutte le altre viste mi danno
>come risultato "vuoto".
>Come posso ovviare a questo problema , nel senso che se la tabella
>tabfattura sia vuota , le altre mi diano di valiri?
posso chiederti come mai CROSS JOIN? devi fare dei prodotti cartesiani?
Al di là di questo, se una tabella è vuota dovrai prevedere la possibilità di considerare anche i legami che non si verificherebbero (con outer join).
Ma prima cerchiamo di capire quello che vuoi ottenere.
Se riesci, postaci qualche dato di esempio e le create delle tabelle affinchè possiamo essere più efficaci nell'aiuto..

>Grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

Zagor60 Profilo | Junior Member

Ciao , sei un grande.
Funziona.
SELECT ISNULL(SUM(dbo.TabFatture.totale), 0) AS TotCST
FROM dbo.TabFatture LEFT OUTER JOIN
dbo.TabViaggi ON dbo.TabFatture.n_vg = dbo.TabViaggi.n_vg AND dbo.TabFatture.nave = dbo.TabViaggi.nave
WHERE (dbo.TabFatture.Tipo = 'CONTROSTALLIE')
Grazie
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5