En iyi yanıtlayıcılar
Outer apply ?

Soru
-
Merhaba
x_seansogrencileri adında bir table var. id, seansid, yas columlar. Aşağıdaki sorguyla birleştirerek. eğer x_seansturu A ise x_seansogrencilerindeki ilk kayıta göre +2 ve -2 yaş aralığındaki seansları göstermesi gerekiyor. Eğer seansturu B ise x_seansogrencileri tabile daki ilk kayıtın yaşına eşit senasları göstermesi gerekiyor. Aşağıdaki sorguyla nasıl birleştirebilirim ?
SELECT x_seansprogrami.x_baslangicsaati as x_baslangicsaati, x_seansprogrami.x_bitissaati as x_bitissaati, x_seansprogrami.x_gun as x_gun, x_seansprogrami.x_seans as x_seans, x_seansprogrami.x_egitmen as x_egitmen FROM x_seansprogrami OUTER APPLY (SELECT TOP 1 x_id, x_adi FROM x_seansegitmenleri WHERE x_seansprogrami.x_egitmen = x_seansegitmenleri.x_adi ) AS x_seansegitmenleri OUTER APPLY (SELECT TOP 1 x_id, x_adi, x_seansturu, x_seansturadi, x_ogrencisayisi FROM x_seans WHERE x_seansprogrami.x_seans = x_seans.x_adi ) AS x_seans WHERE (NOT (x_seansprogrami.x_id IS NULL))
Yanıtlar
-
SELECT x_seansprogrami.x_baslangicsaati AS x_baslangicsaati ,x_seansprogrami.x_bitissaati AS x_bitissaati ,x_seansprogrami.x_gun AS x_gun ,x_seansprogrami.x_seans AS x_seans ,x_seansprogrami.x_egitmen AS x_egitmen FROM x_seansprogrami OUTER APPLY ( SELECT TOP 1 x_id ,x_adi FROM x_seansegitmenleri WHERE x_seansprogrami.x_egitmen = x_seansegitmenleri.x_adi ) AS x_seansegitmenleri OUTER APPLY ( SELECT TOP 1 x_id ,x_adi ,x_seansturu ,x_seansturadi ,x_ogrencisayisi FROM x_seans WHERE x_seansprogrami.x_seans = x_seans.x_adi ) AS x_seans OUTER APPLY ( SELECT TOP 1 x_id ,x_yas FROM x_seansogrencileri WHERE x_seans.x_id = x_seansogrencileri.x_seansid ) AS x_seansogrencileri WHERE NOT (x_seansprogrami.x_id IS NULL) AND ( ( x_seansturu = 'B' AND x_seansogrencileri.x_yas = @yas ) OR ( x_seansturu = 'A' AND x_seansogrencileri.x_yas BETWEEN @yas - 2 AND @yas + 2 ) )
- Yanıt Olarak İşaretleyen MSDN.CSharp 31 Mayıs 2012 Perşembe 23:16
Tüm Yanıtlar
-
Aşağıdaki sql cümlesini bir önceki mesajdaki sql cümlesine nasıl ekleyebilirim ? outer apply kullanarak ?
SELECT x_seansogrencileri.x_yas FROM x_seansprogrami INNER JOIN x_seans ON x_seansprogrami.x_seans = x_seans.x_adi INNER JOIN x_seansogrencileri ON x_seans.x_id = x_seansogrencileri.x_seansid
-
Merhaba
Aşağıdaki sql cümlesinde yas ın eşit olduğu kayıtları çekebiliyorum. fakat x_seansturu A ise @yas +2 ve -2 aralığındaki kayıtları çekmem gerekiyor. x_seansturu B is @yas a eşit olanları çekmem gerekiyor. Şu anki sorgu sadece eşit olanları çekiyor. Diğer sonucu nasıl elde edebilirim ?
SELECT x_seansprogrami.x_baslangicsaati as x_baslangicsaati, x_seansprogrami.x_bitissaati as x_bitissaati, x_seansprogrami.x_gun as x_gun, x_seansprogrami.x_seans as x_seans, x_seansprogrami.x_egitmen as x_egitmen FROM x_seansprogrami OUTER APPLY (SELECT TOP 1 x_id, x_adi FROM x_seansegitmenleri WHERE x_seansprogrami.x_egitmen = x_seansegitmenleri.x_adi ) AS x_seansegitmenleri OUTER APPLY (SELECT TOP 1 x_id, x_adi, x_seansturu, x_seansturadi, x_ogrencisayisi FROM x_seans WHERE x_seansprogrami.x_seans = x_seans.x_adi ) AS x_seans OUTER APPLY (SELECT TOP 1 x_id, x_yas FROM x_seansogrencileri WHERE x_seans.x_id = x_seansogrencileri.x_seansid ) AS x_seansogrencileri WHERE (NOT (x_seansprogrami.x_id IS NULL)) AND (x_seansogrencileri.x_yas = @yas)";
-
SELECT x_seansprogrami.x_baslangicsaati AS x_baslangicsaati ,x_seansprogrami.x_bitissaati AS x_bitissaati ,x_seansprogrami.x_gun AS x_gun ,x_seansprogrami.x_seans AS x_seans ,x_seansprogrami.x_egitmen AS x_egitmen FROM x_seansprogrami OUTER APPLY ( SELECT TOP 1 x_id ,x_adi FROM x_seansegitmenleri WHERE x_seansprogrami.x_egitmen = x_seansegitmenleri.x_adi ) AS x_seansegitmenleri OUTER APPLY ( SELECT TOP 1 x_id ,x_adi ,x_seansturu ,x_seansturadi ,x_ogrencisayisi FROM x_seans WHERE x_seansprogrami.x_seans = x_seans.x_adi ) AS x_seans OUTER APPLY ( SELECT TOP 1 x_id ,x_yas FROM x_seansogrencileri WHERE x_seans.x_id = x_seansogrencileri.x_seansid ) AS x_seansogrencileri WHERE NOT (x_seansprogrami.x_id IS NULL) AND ( ( x_seansturu = 'B' AND x_seansogrencileri.x_yas = @yas ) OR ( x_seansturu = 'A' AND x_seansogrencileri.x_yas BETWEEN @yas - 2 AND @yas + 2 ) )
- Yanıt Olarak İşaretleyen MSDN.CSharp 31 Mayıs 2012 Perşembe 23:16