2009-09-24 11 views
0

J'essaie d'obtenir la valeur null dans la colonne USAGE_START_DATE. Jusqu'ici, ce que j'ai obtenu est les enregistrements max uniques de ceux avec la valeur dans la colonne USAGE START DATE, et n'a pas pu trouver les enregistrements avec nulls dans le USAGE START DATE. J'ai déjà essayé ISNULL, COALESCE, NVL, NZ.SQL max et null

J'ai 2 tables: liées par Reservation_id.

ReservationID Usage Start Date 
1    01/01/2001 00:00:00 
1    02/01/2001 00:00:00 
1    03/03/2001 00:00:00 
2    NULL 
2    NULL 

Jusqu'à présent, mon code actuel: Voici ce que je suis:

ReservationID Usage Start DAte 
1    03/03/2001 00:00:00 

Voici ce que je veux:

ReservationID  Usage Start Date 
1     03/03/2001 00:00:00 
2 

Merci !!!

Pour simplifier mon code:

SELECT distinct RENTAL_DETAILS_VW.RESERVATION_ID, 
RENTAL_DETAILS_VW.USAGE_START_DATE, 
FROM BYNXFLEET_BI.RENTAL_DETAILS_VW, WILLOW2K.RESERVATIONS 
WHERE RENTAL_DETAILS_VW.USAGE_START_DATE = (
select max(case when ors2.USAGE_START_DATE is null 
    then {ts ' 2009-01-01 00:00:00 ' } 
    else ors2.USAGE_START_DATE END) 
FROM RENTAL_DETAILS_VW ors2 
where ors2.RESERVATION_ID=RESERVATIONS.RESERVATION_ID) 
+6

Veuillez couper les champs externes pour produire un cas de test minimal. La plupart de cela n'a pas d'importance pour votre question et je n'ai pas hâte d'y aller. – outis

+1

Je ne suis pas vraiment sûr de ce que vous demandez. Il est également utile d'inclure des exemples de résultats - si possible, ce que vous voyez réellement et ce que vous aimeriez voir à la place. Puisque nous n'avons pas votre base de données, nous ne pouvons pas dire ce que cela est censé renvoyer. – SqlRyan

+0

@khoa: J'ai mis à jour ma réponse avec ce que je pense que vous cherchez. – SqlRyan

Répondre

2

Vous n'êtes pas allez obtenir toutes les lignes où USAGE_START_DATE est NULL parce que vous êtes les filtrer - la clause WHERE à la fin voit que seules les lignes qui ont La date maximale pour un RESERVATION_ID correspondant est incluse. Essayez-vous d'inclure des lignes NULL USAGE_START_DATE, même si elles n'ont pas de réservation correspondante?

MISE À JOUR: vous n'avez pas besoin de DISTINCT, et cela peut affecter négativement vos résultats. En outre, puisque vous voulez un "Blank" au lieu de NULL, vous devrez utiliser ISNULL. Vous aurez besoin d'un LEFT JOIN, et j'ai également ajouté des alias de table pour le rendre un peu plus facile à lire. Voici ce que je pense que vous voulez:

SELECT rd.RESERVATION_ID, 
     ISNULL(MAX(rd.USAGE_START_DATE), '') as START_DATE, 
    FROM BYNXFLEET_BI.RENTAL_DETAILS_VW rd 
    LEFT 
    JOIN WILLOW2K.RESERVATIONS r 
    ON rd.RESERVATION_ID = r.RESERVATION_ID