Как использовать ISNULL в запросе в запросе? - PullRequest
0 голосов
/ 18 октября 2011

Мой SQL-запрос, приведенный ниже, теперь корректно возвращает поле RoomsAvailable, за исключением случаев, когда занято 0 комнат, в которых команда SQL вычитает number_of_rooms с NULL и выводит NULL в столбец.Я перепробовал множество вариаций ISNULL и обнаружил, что он не работает;Кто-нибудь знает, как я должен это сделать?

SQL:

SELECT
    Hotel_2.hotel_code, 
    Hotel_2.hotel_country, 
    Room_type_rates_2.room_type_code, 
    Room_type_rates_2.number_of_rooms, 
    Types_2.room_type, 
    Room_type_rates_2.rates, 
            Room_type_rates_2.number_of_rooms -
            (SELECT 
                DISTINCT (SELECT
                             COUNT(dbo.Hotel.hotel_code) AS RoomsTake
                          FROM
                              dbo.Hotel 
                          INNER JOIN dbo.Hotel_Reservation 
                              ON dbo.Hotel.hotel_code = dbo.Hotel_Reservation.hotel_code 
                          INNER JOIN dbo.Room_type_rates 
                              ON dbo.Hotel.hotel_code = dbo.Room_type_rates.hotel_code 
                          INNER JOIN dbo.Types 
                              ON dbo.Hotel_Reservation.room_type_code = dbo.Types.room_type_code 
                              AND dbo.Room_type_rates.room_type_code = dbo.Types.room_type_code
                          WHERE
                              (dbo.Room_type_rates.room_type_code = Room_type_rates_1.room_type_code) 
                              AND (dbo.Hotel.hotel_code = Hotel_1.hotel_code)
                              AND (dbo.Hotel_Reservation.checkin_date >= Hotel_Reservation_1.checkin_date)
                              AND (dbo.Hotel_Reservation.checkout_date <= Hotel_Reservation_1.checkout_date)
                          ) AS RoomsTaken
               FROM
                   dbo.Hotel AS Hotel_1 
               INNER JOIN dbo.Hotel_Reservation AS Hotel_Reservation_1
                   ON Hotel_1.hotel_code = Hotel_Reservation_1.hotel_code 
               INNER JOIN dbo.Room_type_rates AS Room_type_rates_1 
                   ON Hotel_1.hotel_code = Room_type_rates_1.hotel_code 
               INNER JOIN dbo.Types AS Types_1 
                   ON Hotel_Reservation_1.room_type_code = Types_1.room_type_code 
                   AND Room_type_rates_1.room_type_code = Types_1.room_type_code
               WHERE
                   (Hotel_Reservation_1.checkin_date >= '11/19/2011') 
                   AND (Hotel_Reservation_1.checkout_date <= '12/01/2011') 
                   AND (Hotel_1.hotel_country = 'Adelaide') 
                   AND (Types_1.room_type_code = Types_2.room_type_code)
               ) AS RoomsAvailable 
FROM 
    dbo.Hotel AS Hotel_2 
INNER JOIN dbo.Room_type_rates AS Room_type_rates_2 
    ON Hotel_2.hotel_code = Room_type_rates_2.hotel_code 
INNER JOIN dbo.Types AS Types_2 
    ON Room_type_rates_2.room_type_code = Types_2.room_type_code

Текущий вывод:

ADL20 Adelaide CPL 6 Couple Suite 514.0000 3</p> <pre><code>ADL20 Adelaide FYU 3 Family Suite 533.0000 2 ADL20 Adelaide KNG 2 King's Bedroom 556.0000 NULL

1 Ответ

0 голосов
/ 18 октября 2011

Ты имеешь в виду это?:

...ISNULL(COUNT(dbo.Hotel.*),0)...

Или проблема в том, что вы получаете NULL вообще? В этом случае я подозреваю, что ваши JOIN могут иметь проблемы.

Вы можете обернуть ISNULL вокруг любого вложенного подзапроса или значения.

...