Discussione:
SQL full outer join ?
(troppo vecchio per rispondere)
Ammammata
2019-06-28 12:19:48 UTC
Permalink
di solito faccio riferimento a questo schema:
<https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_
orig.jpg>

https://is.gd/kfOcX8 forse è meglio

ora ho tre tabelle a b c dove i record sono identificati univocamente da
una coppia di campi: Distr e Manuf
la maggior parte dei record sono comuni a tutte e tre, ma ogni tabella ha
sia qualche buco (record mancante) che qualcosa in più rispetto alle altre
due

i sette casi possibili:

a b c
1 1 1
2 2
3 3
4 4
5
6
7

ho provato a scrivere una cosa tipo questa:

select *
from a
full outer join b on b.Distr = a.Distr and b.Manuf = a.Manuf
full outer join c on c.Distr = a.Distr and c.Manuf = a.Manuf

ma ottengo un guazzabuglio finale con diversi record dove i due campi
chiave diventano NULL

il sospetto/quasi certezza (guardando i dati) è che il full outer sia
valido tra "a e b" e tra "a e c" (come dichiatato) ma che resti fuori
quello tra "b e c" (e da qui i record null)

la domanda: è corretto usare full outer join come lo ho scritto io?

oppure devo scrivermi tre select union e poi ri-raggruppare i record
sommando i campi?

oppure altro ancora?

grazie
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
http://www.bb2002.it :) <<<<<
........... [ al lavoro ] ...........
Ammammata
2019-06-28 12:49:18 UTC
Permalink
Il giorno Fri 28 Jun 2019 02:19:48p, *Ammammata* ha inviato su
Post by Ammammata
oppure devo scrivermi tre select union e poi ri-raggruppare i record
sommando i campi?
anticipo una risposta: con questo metodo ottengo i dati corretti
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
Post by Ammammata
http://www.bb2002.it :) <<<<<
........... [ al lavoro ] ...........
Ammammata
2019-06-28 12:53:27 UTC
Permalink
Il giorno Fri 28 Jun 2019 02:49:18p, *Ammammata* ha inviato su
Post by Ammammata
con questo metodo ottengo i dati corretti
-- step 7b: print data method 2

select
*
into #tmp7
from
(

select
a.Distr
, a.Manuf
, isnull(a.P3, 0) as P3
, isnull(a.P2, 0) as P2
, isnull(a.P1, 0) as P1
, 0 as SB
, 0 as OB
, isnull(a.C0, 0) as C0
, 0 as TBD
, isnull(a.C0, 0) as T0
, 0 as N1


from #tmp1 a

union all

select
b.Distr
, b.Manuf
, 0 as P3
, 0 as P2
, 0 as P1
, isnull(b.FinBudget, 0) as SB
, isnull(b.OnGBudget, 0) as OB
, 0 as C0
, 0 as TBD
, 0 as T0
, 0 as N1


from #tmp4 b

union all

select
c.Distr
, c.Manuf
, 0 as P3
, 0 as P2
, 0 as P1
, 0 as SB
, 0 as OB
, 0 as C0
, isnull(c.TBD, 0) as TBD
, isnull(c.tbd, 0) as T0
, isnull(c.N1, 0) as N1


from #tmp6 c

) tmp7

select
Distr
, Manuf
, sum(P3) as P3
, sum(P2) as P2
, sum(P1) as P1
, sum(SB) as SB
, sum(OB) as OB
, sum(C0) as C0
, sum(TBD) as TBD
, sum(T0) as T0
, sum(N1) as N1

from #tmp7

group by Distr, Manuf
order by Distr, Manuf
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
Post by Ammammata
http://www.bb2002.it :) <<<<<
........... [ al lavoro ] ...........
Continua a leggere su narkive:
Loading...