Skip to main content

AccessTr.neT


İlişkilendirilmiş Tablo Sorgu Sonucunda Hatalı Değer

İlişkilendirilmiş Tablo Sorgu Sonucunda Hatalı Değer

Çözüldü #1
Kıymetli hocalarım merhabalar,

"tbl_Products" adlı tabloyu referans alarak buradaki IE numarasına göre "tbl_Sales" ve "tbl_Logistic" sayfalarındaki Sevk sayılarının toplamını getirmek için bir sorgu oluşturmaya çalışıyorum; Sorgu tasarımının ekran görüntüsü ekteki gibidir.
Sorgunun Sql kodları aşağıdaki şekilde oluştu.

Burada sıkıntı "tbl_Sales" sayfasındaki sayıların toplamını doğru getirirken; "tbl_Logistic" sayfalarındaki verileri çarparak çok yüksek getiriyor. ("tbl_Sales" sayfasındaki uyan verilerin sayısı) kadar çarparak getiriyor.


Kod:
SELECT tbl_Products.IE, Sum(tbl_Sales.Sevk) AS ToplaSevk, Sum(tbl_Logistic.Sevk) AS ToplaSevk2
FROM (tbl_Products LEFT JOIN tbl_Sales ON tbl_Products.IE = tbl_Sales.isEmri) LEFT JOIN tbl_Logistic ON tbl_Products.IE = tbl_Logistic.tedIE
GROUP BY tbl_Products.IE;

bu konuda destek ve yardımlarınızı bekliyorum, şimdiden teşekkürler...
truhi, 29-09-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#2
JOIN işleminde verilerin nasıl birleştiği önemli, dolayısı ile tablo ve verilerinizi de görmemiz lazım. Şöyleki bir tablo diğer bir tabloda birden fazla eşleşme içeriyorsa örneğin tbl_Products.IE ile tbl_Sales.isEmri arasında birden çok eşleşme varsa diğer tabloda eşleşen kayıtlar çoğaldığından sonuçta toplamlar yanlış şekilde büyüyebilir. Tablo ve veri yapınıza göre alt sorgularla toplamları hesaplamak veya distinct, group by gibi veri çoğalmasını önlemeye yönelik düzenlemeler yapılabilir.
Cevapla
#3
(30/11/2024, 22:13)atoykan yazdı: JOIN işleminde verilerin nasıl birleştiği önemli, dolayısı ile tablo ve verilerinizi de görmemiz lazım. Şöyleki bir tablo diğer bir tabloda birden fazla eşleşme içeriyorsa örneğin tbl_Products.IE ile tbl_Sales.isEmri arasında birden çok eşleşme varsa diğer tabloda eşleşen kayıtlar çoğaldığından sonuçta toplamlar yanlış şekilde büyüyebilir. Tablo ve veri yapınıza göre alt sorgularla toplamları hesaplamak veya distinct, group by gibi veri çoğalmasını önlemeye yönelik düzenlemeler yapılabilir.

Hocam teşekkürler,

hem "tbl_Sales" hem de "tbl_Logistic" bir den çok (10' lar la ifade edilebilen) eşleşme mevcut;

bu durumda sorgu nasıl düzenlenebilir?

iyi akşamlar
truhi, 29-09-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#4
Tablo yapıların görmediğim için farazi olacak biraz sorgunuzdan yola çıkarak
SELECT tbl_Products.IE, ISNULL(SalesTotals.ToplaSevk, 0) AS ToplaSevk, ISNULL(LogisticTotals.ToplaSevk2, 0) AS ToplaSevk2
FROM tbl_Products
LEFT JOIN (SELECT isEmri, SUM(Sevk) AS ToplaSevk FROM tbl_Sales GROUP BY isEmri) AS SalesTotals
ON tbl_Products.IE = SalesTotals.isEmri
LEFT JOIN (SELECT tedIE, SUM(Sevk) AS ToplaSevk2 FROM tbl_Logistic GROUP BY tedIE) AS LogisticTotals
ON tbl_Products.IE = LogisticTotals.tedIE;
gibi tbl_Sales üzerindeki toplamları isEmrine göre, tbl_Logistic üzerindeki toplamları tedIE'ye göre hesapladığınız alt sorgulara bölerek daha doğru sonuç alabilirsiniz. Tablo verilerini zçok ve karmaşık değilse belirttiğim gibi DISTINCTveya GROUP By özelliklerinden de yararlanabilirsiniz. JOIN sorgularında çok iyi değilsiniz evet ama bu tip sorguları yazabilecek kadar gelişme gösterdiniz, biraz daha gayret.
Cevapla
#5
(01/12/2024, 00:12)atoykan yazdı: Tablo yapıların görmediğim için farazi olacak biraz sorgunuzdan yola çıkarak
SELECT tbl_Products.IE, ISNULL(SalesTotals.ToplaSevk, 0) AS ToplaSevk, ISNULL(LogisticTotals.ToplaSevk2, 0) AS ToplaSevk2
FROM tbl_Products
LEFT JOIN (SELECT isEmri, SUM(Sevk) AS ToplaSevk FROM tbl_Sales GROUP BY isEmri) AS SalesTotals
ON tbl_Products.IE = SalesTotals.isEmri
LEFT JOIN (SELECT tedIE, SUM(Sevk) AS ToplaSevk2 FROM tbl_Logistic GROUP BY tedIE) AS LogisticTotals
ON tbl_Products.IE = LogisticTotals.tedIE;
gibi tbl_Sales üzerindeki toplamları isEmrine göre, tbl_Logistic üzerindeki toplamları tedIE'ye göre hesapladığınız alt sorgulara bölerek daha doğru sonuç alabilirsiniz. Tablo verilerini zçok ve karmaşık değilse belirttiğim gibi DISTINCTveya GROUP By özelliklerinden de yararlanabilirsiniz. JOIN sorgularında çok iyi değilsiniz evet ama bu tip sorguları yazabilecek kadar gelişme gösterdiniz, biraz daha gayret.


Hocam teşekkürler;
ekli ekran görüntüsündeki şekilde bir hata verdi ama;

bilemedim artık.

iyi geceler.
truhi, 29-09-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#6
(01/12/2024, 01:10)truhi yazdı:
(01/12/2024, 00:12)atoykan yazdı: Tablo yapıların görmediğim için farazi olacak biraz sorgunuzdan yola çıkarak
SELECT tbl_Products.IE, ISNULL(SalesTotals.ToplaSevk, 0) AS ToplaSevk, ISNULL(LogisticTotals.ToplaSevk2, 0) AS ToplaSevk2
FROM tbl_Products
LEFT JOIN (SELECT isEmri, SUM(Sevk) AS ToplaSevk FROM tbl_Sales GROUP BY isEmri) AS SalesTotals
ON tbl_Products.IE = SalesTotals.isEmri
LEFT JOIN (SELECT tedIE, SUM(Sevk) AS ToplaSevk2 FROM tbl_Logistic GROUP BY tedIE) AS LogisticTotals
ON tbl_Products.IE = LogisticTotals.tedIE;
gibi tbl_Sales üzerindeki toplamları isEmrine göre, tbl_Logistic üzerindeki toplamları tedIE'ye göre hesapladığınız alt sorgulara bölerek daha doğru sonuç alabilirsiniz. Tablo verilerini zçok ve karmaşık değilse belirttiğim gibi DISTINCTveya GROUP By özelliklerinden de yararlanabilirsiniz. JOIN sorgularında çok iyi değilsiniz evet ama bu tip sorguları yazabilecek kadar gelişme gösterdiniz, biraz daha gayret.


Hocam teşekkürler;
ekli ekran görüntüsündeki şekilde bir hata verdi ama;

bilemedim artık.

iyi geceler.

Hocam iyi günler, iyi pazarlar
örnek veritabanı ektedir.

ilginiz ve herşeyden önce sabrınız için tekrar-tekrar teşekkür ederim.
.rar DB8.rar (Dosya Boyutu: 43,11 KB | İndirme Sayısı: 3)
truhi, 29-09-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task