Domanda

Ho due tabelle table1 e table2. Table2 sta avendo meno il numero di righe di tabella 1. In queste due tabelle sono presenti due colonne di data caldate1 nella tabella 1 e caldate2 in table2. Così ora ho bisogno di unirsi in queste due tabelle e ottenere il massimo delle due colonne di data e tenere a nuova tabella. Ma se ci uniamo interna su queste due tabelle le righe Tabella 1, che non ci sono in table2 non andrà al tavolo finale. Quindi abbiamo bisogno di qualche cosa come

table1 
left outer join
table2

Ma c'è una situazione che le due date stanno avendo valori nulli. Così Posso usare COALESCE per ottenere i dati corretti negli scenari di seguito ..

1. riga nella tabella 1 non è lì in table2 -> poi il caldate1 in tabella 1 dovrebbe andare in tavolo finale.

2. riga nella tabella 1 è lì in table2 e caldate1 di tabla1 e caldate2 di table2 sono nulli -> valore nullo dovrebbe entrare in colonna data tavolo finale

3. riga nella tabella 1 è lì in table2 e caldate1 non è nullo e caldate2 è nullo -> poi caldate1 giungano nella tabella finale.

4. riga nella tabella 1 è lì in table2 e caldate1 è nullo e caldate2 non è nullo -> poi caldate2 dovesse venire a tavolo finale

5. riga nella tabella 1 è lì in table2 e caldate1 è maggiore di caldate2 -> caldate1 deve entrare in tavolo finale

6. riga nella tabella 1 è lì in table2 e caldate2 è maggiore di caldate1 -> caldate2 deve entrare in tavolo finale

Non abbiamo bisogno di prendere in considerazione le righe in table2 che non sono di corrispondenza con table1. Quindi, in pratica ho bisogno di tutte le righe table1 con ultima della caldate se una particolare riga è lì in entrambe le tabelle. Grazie in anticipo. Io non sono in grado di ottenere il corretto funzionamento di farlo it.Is si coagulano?

È stato utile?

Soluzione 2

Sto pensando di fare qualcosa di simile qui sotto per soddisfare la mia esigenza.

SELECT 
a.number,
CASE WHEN ZEROIFNULL(a.caldate1) > ZEROIFNULL(b.caldate2)
THEN a.caldate1  -- This is working
ELSE
b.caldate2
END AS caldate
/*COALESCE (a.caldate1,caldate2) AS caldate*/ -- This is not giving max of dates
FROM 
table1  a
LEFT OUTER JOIN
table2  b
ON
a.number = b.number

Grazie per l'aiuto. Ora il suo fare con il suddetto metodo.

Altri suggerimenti

Dalla query precedente, se un numero presente in table2 e non in Tabella 1 , i record saranno eliminati, è possibile utilizzare piena outer join nella query precedente.

o consultare la domanda sotto coprirà questo scenario anche.

sel number,max(date1) from (
  sel number,max(caldate1) as date1
    from table1
  union
  sel number,max(caldate2) as date1
    from table2
)tmp ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top