2011-10-17 2 views
0

以下のMy SQL Queryは、SQLコマンドがnumber_of_roomsをNULLで減算し、NULLをColumnに出力する、0の部屋をとった場合を除いて、RoomsAvailableフィールドを正しく返しています。私は数多くのISNULLバリエーションを試して、それがうまく動作していないことを発見しました。誰が私はこれをやっているべきか知っていますか?クエリ内のクエリで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 

電流出力:あなたは、これが

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

それとも、全くNULLを取得している問題ですが?:

ADL20 Adelaide CPL 6 Couple Suite 514.0000 3

ADL20 Adelaide FYU   3 Family Suite 533.0000 2 

ADL20 Adelaide KNG   2 King's Bedroom 556.0000 NULL 

+0

なぜSELECT DISTNCTにSELECT COUNTがありますか?クエリで複数のレコードが返された場合は、おそらくエラーが発生し、計算が機能しなくなります。 – vol7ron

答えて

0

を意味しますか?その場合、あなたのJOINに問題があると思われます。

ISNULLを約のいずれかにラップできます。ネストされたサブクエリまたは値。

+0

こんにちは、私はこれがどれほど愚かであるかを理解しました。まだNULLになっています。 – user971537

関連する問題