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

    31 Mayıs 2012 Perşembe 12:03

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

    31 Mayıs 2012 Perşembe 17:09
  • 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)";
    
    

    31 Mayıs 2012 Perşembe 22:24
  • 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
    31 Mayıs 2012 Perşembe 23:16