SAP ABAP Left Outer Join KullanımıOkuma süresi 3 dakika

Merhabalar,

Bu yazımızda ABAP yazılım dilinde sıkça kullanılan Join işlemlerinden olan Left Outer Join işlemine değineceğiz.

Öncelikle Left Outer Join’in ne işe yaradığını ve nasıl kullanabileceğimizi anlatmak istiyorum.

Left Outer Join işleminin inner join işleminden farkı, join yapılan tabloların herhangi birinde join şartı sağlanıyor ise, o tabloya ait veriler döndürülürken, diğer tabloya ait olan veriler boş döner.

Inner Join konusunda işlediğimiz örnekte, siparişi olan müşterilerimizi listelemiştik. Burda inner join kullanmamızın sebebi, her müşterinin siparişi olmayabilir ancak her siparişin mutlaka bir müşterisi olacağından emin olduğumuz için bu tabloların birleştirilmesinde inner join kullanmıştık.

Şimdiki örneğimiz ise,  siparişi olsun veya olmasın tüm müşterileri listelemek istediğimizde Left Outer Join kullanmamız gerekecektir.

VBAK : SD(Sipariş) Belgesi Başlık Verileri tablosu

KNA1 : Müşteri Ana Verisi tablosu 

Öncelikle Join olmadan hem müşteri hem de sipariş ana tablolarımızı Internal Table olarak kullanalım.

Tablomuzda Müşteri No, Müşteri Adı, Sipariş No, Sipariş Tarihi ve Sipariş Türünü raporlayacağız.

DATA :	BEGIN OF GT_DATA OCCURS 0,
	 KUNNR LIKE VBAK-KUNNR,
         NAME1 LIKE KNA1-NAME1,
         VBELN LIKE VBAK-VBELN,
         ERDAT LIKE VBAK-ERDAT,
         AUART LIKE VBAK-AUART,
       	END OF GT_DATA.

** Seçim Ekranında S_KUNNR adında müşteri numarası aralığı girme alanı olsun
	
	SELECT * FROM KNA1 WHERE KUNNR IN S_KUNNR.
	 SELECT * FROM VBAK WHERE KUNNR EQ KNA1-KUNNR.
	  CLEAR GT_DATA.
	  MOVE-CORRESPONDING KNA1 TO GT_DATA.
          MOVE-CORRESPONDING VBAK TO GT_DATA.
	  APPEND GT_DATA.
	 ENDSELECT.
	ENDSELECT.

** Siparişi olan veya olmayan tüm müşteriler için LEFT OUTER JOIN yöntemi şu şekilde yazılır.
	
	SELECT 	A-KUNNR
		A-NAME1
		B-VBELN
		B-ERDAT
		B-AUART
		INTO TABLE GT_DATA
		FROM KNA1 AS A
		LEFT OUTER JOIN VBAK AS B
		   ON A-KUNNR EQ B-KUNNR
		WHERE A-KUNNR IN S_KUNNR.

Eğer VBAK tablosunda sipariş oluşturma tarihini de raporumuzda kullanıcımızdan alsaydık yani kullanıcıdan müşteri numarası ve sipariş oluşturma tarihi bilgisini alsa idik, left outer join işlemimiz hata verecekti. Çünkü abap yazılım dili left outer join işleminde birden fazla koşul değeri girmemize izin vermemektedir. Yani kodumuzu aşağıdaki gibi yazamayız.

WHERE A-KUNNR IN S_KUNNR AND

                B-ERDAR IN S_ERDAT.

Kodumuzu bu şekilde işleyip çalıştırdığımızda SAP sistemi bizlere “No fields from the right-hand table of a LEFT OUTER JOIN may appear in the WHERE condition : B-ERDAT” hatasını dönecektir.

Bu kod yardımı ile, kullanıcıdan aldığımız müşteri değeri veya aralığı(bu yüzden IN koşulunu ekledik) KNA1 tablosunda ki müşterilere eşitleyip NAME1 alanını elde edip, akabinde KUNNR alanı ile VBAK tablosunda ki KUNNR alanına left outer  join yaparak bu müşterilere veya müşterilere ait olmayan siparişlerin  bilgileri almış oluyoruz.

Bir sonraki yazımızda görüşmek dileği ile.

Bu Yazıyı Beğendiniz mi?
I agree to have my personal information transfered to MailChimp ( more information )
Sizde 3.000 kişinin üzerinde bulunan abonelerimiz arasına katılın. Abone olarak yeni eklenen içeriklerimizden anında haberdar olursunuz
E-Mail adresiniz sapuzman.com dışında 3 tekil veya tüzel kişilikler ile paylaşılmayacaktır
Umut Demirci hakkında 172 makale
1986 yılında Kocaeli'nin Darıca ilçesinde dünyaya geldim. Bahçeşehir Üniversitesi, Matematik ve Bilgisayar Bilimleri bölümünü başarılı bir şekilde tamamladım. Üniversite yıllarında çeşitli sosyal sorumluluk projeleri ve bilişim projeleri içerisinde görev aldım. Üniversiteyi tamamladıktan hemen sonra 2010 yılında başladığım ERP sektöründe, SAP PMO (Proje Yönetim Ofisi) Takım Lideri olarak çalışmaya devam etmekteyim. Daha detaylı bilgi için Hakkımda menüsünü kullanabilirsiniz.

Kimler Neler Demiş?

avatar
  Subscribe  
Bildir