2017-01-11 1 views
0

Ich habe eine Abfrage mit mehreren joins. Ich muss ein Feld von einem table mit einem Feld einer Sekunde vergleichen. Wenn das erste Feld kleiner als das andere ist, muss ich das erste Feld mit dem zweiten Feld überlagern. Kann dies mit einer case- oder if-Anweisung geschehen? Die Abfrage extrahiert Daten und erstellt dann eine Ergebnismenge mit mehreren Zeilen in einer Zeile. die PK ist unique_key, linexVergleichen Sie zwei Felder, die eines der Felder basierend auf dem Ergebnis aktualisieren

Beispiel:

unique_key, LINE1, person_id, service_date, Menge unique_key, line2, person_id, service_date, Menge unique_key, line3, person_id, service_date, Menge

Select t1.Unique_key, t1.linex, t1.person_id,t1.service_date, t1.amount,  t2.service_date, t2.amount, t3.service_date, t3.amount 
    from tbl1 t1 
    left join tbl2 t2 
    on t1.unique_key = t2.unique_key 
    left join tbl3 t3 
    on t1.unique_key = t3.unique_key 

Ich brauche update das erste Service-Datum mit dem zweiten, wenn das zweite größer als das erste ist.

Die Abfrage ist komplexer als diese.

+0

Was bedeutet das? 'Die Abfrage extrahiert Daten und erstellt dann eine Ergebnismenge mit mehreren Zeilen in einer Zeile. –

Antwort

0
case when t2.service_date > t1.service_date 
    then t2.service_date 
    else t1.service_date 
end as service_date 

oder fehlt mir etwas?

+0

Die Pivot-Tabelle ist –

0

Sie müssen das t1.service_date Feld umbenennen:

Select t1.Unique_key 
, t1.linex 
, t1.person_id 
, iif(t2.service_date > t1.service_date, t2.service_date, t1.service_date) as [Overlayed_Service_Date] 
, t1.amount 
, t2.service_date 
, t2.amount 
, t3.service_date 
, t3.amount 
from tbl1 t1 
left join tbl2 t2 on t1.unique_key = t2.unique_key 
left join tbl3 t3 on t1.unique_key = t3.unique_key 
Verwandte Themen