0

null列の値を取得しようとしていUSAGE_START_DATEます。

USAGE START DATEこれまでのところ、列に値を持つレコードの一意の最大レコードが得nullsられ、USAGE START DATE.

私はすでに試しましISNULLた , COALESCE, .NVLNZ

私は 2 つのテーブルを取得しました: 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

これまでのところ、私の現在のコードで: これが私が得たものです:

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

ここに私が欲しいものがあります:

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

ありがとうございました!!!

私のコードを簡素化するには:

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)
4

1 に答える 1

2

USAGE_START_DATE が NULL の行は除外しているため、取得することはできません。最後の WHERE 句では、一致する RESERVATION_ID の最大日付を持つ行のみが含まれていることがわかります。一致する予約がない場合でも、NULL USAGE_START_DATE 行を含めようとしていますか?

更新: DISTINCT は必要ありません。結果に悪影響を及ぼす可能性があります。また、NULL ではなく「空白」が必要なため、 を使用する必要がありますISNULL。が必要ですLEFT JOIN。読みやすくするために、いくつかのテーブル エイリアスも追加しました。ここにあなたが欲しいと思うものがあります:

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
于 2009-09-24T17:00:24.903 に答える