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.
Sosyal Medya Hesaplarımız
Bir yanıt bırakın