"INNER JOIN" metodu ile sorgu

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Doğru söylüyorsunuz. Birim fiyat "0" olmamalı. Birim fiyat girişine sınırlama koymak lazım.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Daha önceki kodlarda sonucun (-) olarak dönmesine karşılık yaptığım ufak iyileştirme açıkçası içime sinmediğinden, şimdi daha mantıklı değişik bir yöntem denedim.

Yapılan değişikliğe ilişkin olarak 16 No'lu mesaj içeriği mesaj ekindeki dosya güncellenmiştir. Oradan tekrar yeni dosyayı indirebilirsiniz.

.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Ekran Alıntısı.JPG
Kod:
Call Ado_Baglan
TextBox4.Value = "0"
For i = 0 To ListBox2.ListCount - 1
Set rs = CreateObject("adodb.recordset")
sorgu = "Select sum([TOPLAM]) as [TOPLAM AGIRLIK] from (Select HAMMADDE.[STOK_KODU],HAMMADDE.[AGIRLIK],URUN_DOSYALARI.[ADET],HAMMADDE.[AGIRLIK]*URUN_DOSYALARI.[ADET] as [TOPLAM] from [HAMMADDE] as HAMMADDE " & _
"inner join [URUN_DOSYALARI] as URUN_DOSYALARI " & "on HAMMADDE.[STOK_KODU] = URUN_DOSYALARI.[STOK_KODU] Where URUN_DOSYALARI.[URUN_KODU]='" & ListBox2.Column(0, i) & "')"
rs.Open sorgu, con, 1, 3
TextBox4.Value = Format(TextBox4.Value + (rs("TOPLAM AGIRLIK") * ListBox2.Column(10, i)), "#,##0.00")
Next
i = i + 1
rs.Close: con.Close
Set con = Nothing: Set rs = Nothing: sorgu = ""
TextBox4.Value = Format(TextBox4, "#,##0.00 KG")
Access Data

Daha önce Ürün Ağırlığı ile ilgili hazırlamış olduğunuz kodu "İŞ EMİRLERİ"ne bu şekilde uyguladım. Local çalışırken hızlı ama Ağ'da Ürün adetlerini doğrudan Access data'daki İŞ EMİRLERİ tablosundan alamadığımdan ve Listeden gittiğimden dolayı bir sorun yaşar mıyım?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Olayı tam olarak anlayamadım ..... Ürün adetlerini neden Access tablosundaki ilgili alandan alamıyorsunuz ?

.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Kod:
sorgu = "Select sum([TOPLAM]) as [TOPLAM AGIRLIK] from (Select HAMMADDE.[STOK_KODU],HAMMADDE.[AGIRLIK],URUN_DOSYALARI.[ADET],HAMMADDE.[AGIRLIK]*URUN_DOSYALARI.[ADET] as [TOPLAM] from [HAMMADDE] as HAMMADDE " & _
"inner join [URUN_DOSYALARI] as URUN_DOSYALARI " & "on HAMMADDE.[STOK_KODU] = URUN_DOSYALARI.[STOK_KODU] Where URUN_DOSYALARI.[URUN_KODU]='" & ListBox2.Column(0, i) & "')"
Bu sorguya nasıl ekleyeceğimi bilmediğimden dolayı alamıyorum :)
Yukarıdaki gibi yazmakla, sorguya dahil etmek arasında hız olarak bir fark olur mu?
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şimdi eğer olay; verilerin 2 ayrı dosyadaki farklı tablolardaki farklı alanlardan okunarak, sorguda bu verilerin Left Join ile birleştirilmesi ve sonucun alınması ise, o zaman ekli dosyaları inceleyin.

Burada;

- Test_GetData_9_HD.xlsm adlı dosyada sadece kodlar var, içinde konuyla ilgili hiç bir tablo, alan, veri yok.... Yani, bu dosyayı sizin çalışmanızdaki programın ara yüzü gibi düşünebiliriz.

- Data_Malzemeler.xlsx adlı dosya, kullandığımız veri tabanı dosyalarından birincisi ve burada; HAMMADDE tablosunda ID, STOK_KODU, MALZEMELER ve AGIRLIK alanları var ...

- Data_Urunler.xlsx adlı dosya ise, kullandığımız veri tabanı dosyalarından ikincisi...... burada ise; ID, STOK_KODU, ADET, ACIKLAMA, URUN_KODU ve URUN_ADI alanları var...

Dosyaların hepsini indirin ve bir klasöre yerleştirin. Veri tabanı olarak kullanılan dosyalar kapalıyken, Test_GetData_9_HD.xlsm dosyasını açın, kodları çalıştırın.

.
 

Ekli dosyalar

Son düzenleme:

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Bunda bir sorun yok Haluk Bey. Ben olayı tam anlatamadım galiba. Resimdeki Listbox2 sizin sorgu yapıp ürün ağırlığını bulduğunuz Ürün Dosyaları. Yukarıda verdiğim kod ise LISTBOX1; yani İŞ EMİRLERİ'ne tıklayınca (İş emirleri Listbox2'deki ürün dosyalarından oluşuyor) sizin yazdığınız sorguyu kullanarak Listbox2'de ne kadar ürün dosyası varsa ağırlığını hesaplayıp sonra topluyor. "For Döngüsünü" bu yüzden kullandım. Mesaj #23 te eklediğim Access dosyasında İŞ EMİRLERİ tablosu var. Bu tabloda İŞ koduna (Resim:Listbox1) göre içerisinde olan ürünler ve adetleri (Yani Resim:Listbox2) yazılı.
Kod:
    strQuery = "Select sum([TOPLAM]) as [TOPLAM AGIRLIK] from " & _
               "(Select Table1.[STOK_KODU],Table1.[AGIRLIK], " & _
               "Table2.[ADET],Table1.[AGIRLIK]*Table2.[ADET] as [TOPLAM] from [" & WB1 & "].[HAMMADDE$] " & _
               "as Table1 " & _
               "left join [" & WB2 & "].[URUN_DOSYALARI$] as Table2 " & _
               "on Table1.[STOK_KODU] = Table2.[STOK_KODU] where Table2.[URUN_KODU]='" & Range("I3") & "')"
Bu sizin Ürün ağırlığı Hesaplamak için yazığınız sorguyu İŞ EMİRLERİ tablosundaki İş Koduna Göre, Ürünlerin Toplam (Adetleri ile birlikte) ağırlığını verecek şekilde tek sorgu yapamadım. Yani Range("I3") bu sefer Ürün Kodu değil Listbox1'deki İş Kodu gelecek ve İş Emri içerisindeki Bütün Ürünlerin Toplam ağırlığını verecek.
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şimdi bir sıkıntı var ama anlayamadım..... ben sizin 23 No'lu mesajınızdaki Access dosyasının içeriğini Excel'e aldığımda; HAMMADDE tablosunda AGIRLIK alanını göremedim.

Kodlar, ağırlıkları nereden okuyacak ?

.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Özür dilerim Haluk Bey. Dosyayı sadeleştiriken silmişim.
 

Ekli dosyalar

Merhum İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,094
Excel Vers. ve Dili
Excel, 365 - İngilizce
.

Pivot Table ile yapılmış işinize yarar mı?

.
 

Ekli dosyalar

Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şimdiki dosyada HAMMADDE ve IS_EMIRLERI tabloları boş ....

Neyse, siz yukarıdaki örneklere göre kendiniz birşeyler geliştirirsiniz artık...

Kolay gelsin,

.
 

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Vba'dan daha sonrası için Masaüstü programcılığa geçerken sorun yaşamamak için projelerimde Excel sayfa işlemlerini çok kullanmak istemiyorum. Userform kontrolleri ve Veritabanı sorgularını kullanıyorum. Çalışma için teşekkür ederim. Sizinde elinize sağlık Sn. İdris SERDAR
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Son eklediğiniz Access dosyasındaki tablolar tamam...

Ben anladığım kadarıyla bir dosya yaptım, siz bir bakın .....

TOPLAM KG = ∑ ( ( IS_EMIRLERI.adet + URUN_DOSYALARI.adet ) x HAMMADDE.agirlik )

Kodları çalıştırdıktan sonra, "Detay" tablosunda listelenen verileri kullanarak yukarıdaki formüle göre toplam ağırlığı buldum.......... durumu değerlendirirsiniz.

Ya da, formülü belki de aşağıdaki gibi kullanacaksınız..... ne yapılmak istendiğini tam anlamadığım için emin değilim;

TOPLAM KG = ( IS_EMIRLERI.adet x URUN_DOSYALARI.adet x HAMMADDE.agirlik )

veya;

TOPLAM KG = ∑ ( URUN_DOSYALARI.adet x HAMMADDE.agirlik )

bunlardan birisi olmalı herhalde ....

.
 

Ekli dosyalar

Son düzenleme:

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
TOPLAM KG = ∑ ( IS_EMIRLERI.adet x URUN_DOSYALARI.adet x HAMMADDE.agirlik )
Kesinlikle budur Haluk Bey (y)
Aslında mantığı çok basit. Bütün imalatlarda Hammaddeler, Ürünleri; Ürünlerde İşin tamamını oluşturur. Sunta,vida vs. Hammadde; Masa,Keson,Dolap Ürün; Bunların hepsinin kullanıldığı Ofis bir İş Dosyasıdır (İş Emri Tablosu)
Hammaddelerin ağırlığı, Ürün ağırlığını; Ürünlerin ağırlıkları da, İşin toplam ağırlığını veriyor. İşin Maliyet kısmı da aynı şekilde işliyor.

Kod:
sorgu = "Select sum(CCur([NET TOPLAM])) as [GENEL TOPLAM] from " & "(Select " & _
    " 1 - Replace(Table3.[ISKONTO_1],'%','')/100 as [ISKONTO1], " & _
    " 1 - Replace(Table3.[ISKONTO_2],'%','')/100 as [ISKONTO2], " & _
    " 1 - Replace(Table3.[ISKONTO_3],'%','')/100 as [ISKONTO3], " & _
    " 1 - Replace(Table3.[ISKONTO_4],'%','')/100 as [ISKONTO4], " & _
    " [ISKONTO1]*[ISKONTO2]*[ISKONTO3]*[ISKONTO4] as [ISKONTO TOPLAMI], " & _
        " IIF(Table1.[PARA_BIRIMI]='" & ChrW(8378) & "', Table1.[BIRIM_FIYAT] * '1' * Table2.[ADET] * [ISKONTO TOPLAMI], " & _
        " IIF(Table1.[PARA_BIRIMI]='" & ChrW(36) & "', Table1.[BIRIM_FIYAT] * '" & XED_FORM.DOLAR.Value & "' * Table2.[ADET] * [ISKONTO TOPLAMI], " & _
        " Table1.[BIRIM_FIYAT] * '" & XED_FORM.EURO.Value & "' * Table2.[ADET] * [ISKONTO TOPLAMI]))" & _
        " as [NET TOPLAM] from " & "(" & "[HAMMADDE] as Table1 " & "left join " & "[URUN_DOSYALARI] as Table2 " & _
        "on Table1.[STOK_KODU] = Table2.[STOK_KODU] " & ") " & "left join " & "[ISKONTO] as Table3 " & "on Table1.[FIRMA] = Table3.[FIRMA]" & _
     "where Table2.[URUN_KODU]='" & ListBox1.LIST(ListBox1.ListIndex, 0) & "')"
Yukarıda yazdığınız sorgu ile Ürün Fiyatını Bulmuştunuz. Yine Aynı IS_EMIRLERI tablosunu, bu soruya dahil edince de İşin Toplam fiyatı çıkmış olacak.

Bu anlatmaya çalıştığım aslında piyasada muhasebe programından çakma ERP programlarında var. Ama maalesef birçoğu bundan öteye gidememiş. :confused: Teşekkür etmekten utanır hale geldim vallahi, yardımlarınızla projem daha bir güzel oldu. Çok sağolun.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Estağfurullah, kolay gelsin.

Bu arada; işin toplam maliyetini bulmak kolay, sadece ekli dosyadaki gibi ağırlıkları ilgili birim fiyatlarla çarpmak gerekiyor.....

Ama, burada birim fiyatlara iskontoları uygulayamazsınız, çünkü en son verdiğiniz tablolarınız buna uygun değil !


.
 

Ekli dosyalar

Son düzenleme:

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
204
Excel Vers. ve Dili
Excel 2021
Altın Üyelik Bitiş Tarihi
03-09-2026
Hammaddelerin Firma bilgileri eksik kalmış. :( Mesaj #29 da düzelttim Haluk Bey. Bundan dolayı mı uygulayamıyoruz yoksa Tablolarda uygun olmayan başka bir şey mi gördünüz?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,367
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
İskontoların olduğu tabloda iskonto oranlarını metinden yüzde (numerik) olarak düzenlemeniz sorgu yazımını kolaylaştırır. Ben bunu düzenleyerek tek seferde sade bir sorguya ulaştım. Haluk Bey'in iskonto hesabı hatalı görünüyor bu arada. Daha önce de belirttiğim gibi MS Access ile ikiden fazla tablo birleşiminde parantez kurallarına aşağıdaki gibi uymanız gerekiyor.

SQL:
SELECT
   IE.IS_KODU,
   IE.URUN_KODU,
   UD.STOK_KODU,
   HM.MALZEMELER,
   HM.AGIRLIK,
   HM.BIRIM_FIYAT AS BRUT_BIRIM_FIYAT,
   ISK.ISKONTO_1 + (ISK.ISKONTO_2 * (1 - ISK.ISKONTO_1) + (ISK.ISKONTO_3 * (1 - ISK.ISKONTO_1 - ISK.ISKONTO_2))) AS TOP_ISKONTO,
   HM.BIRIM_FIYAT * (1 -  TOP_ISKONTO) AS NET_FIYAT,
   HM.AGIRLIK * NET_FIYAT AS TUTAR,
   HM.PARA_BIRIMI
FROM
(
   (
      IS_EMIRLERI AS IE LEFT JOIN URUN_DOSYALARI AS UD ON IE.URUN_KODU = UD.URUN_KODU
   )
      LEFT JOIN HAMMADDE AS HM ON UD.STOK_KODU = HM.STOK_KODU
)
LEFT JOIN ISKONTO AS ISK ON HM.FIRMA = ISK.FIRMA
Düzenlenen veritabanınızı indirin...

Ekran...

1564056862349.png
 

Ekli dosyalar

Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Hammaddelerin Firma bilgileri eksik kalmış. :( Mesaj #29 da düzelttim Haluk Bey. Bundan dolayı mı uygulayamıyoruz yoksa Tablolarda uygun olmayan başka bir şey mi gördünüz?
Evet ondan bahsediyordum, tablolar arasında o yüzden ilişki kurulamıyordu...


Haluk Bey'in iskonto hesabı hatalı görünüyor bu arada.
Üstad, o kadar çok çeşitli iskonto hesapları yapılıyor ki ..... sırf bir sonuç çıksın diye yazmıştım. Nasıl olsa, istenilen amaca göre matematiksel işlemlerle düzeltilir diye düşünmüştüm.

Ben de final sorguyu hazırlamıştım ama muhtemelen parantezlerin arasında boğulunca çalışmamıştı, şimdi senin sorguya bakayım .... :)

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
.......
....
Ben bunu düzenleyerek tek seferde sade bir sorguya ulaştım.
.....
Üstad, sanırım döviz cinsinden birim fiyatları TL'e çevirme kısmını sorguya dahil etmemişsin .... hatırlatayım dedim ;)

.
 
Üst