SQL Right Join Yardım
#1
Öncelikle herkese iyi akşamlar. SQL sorgumda bir sorunla karşılaşıyorum. Şöyleki ;

hareketler ve dönemler diye 2 tane tablom var. hareketler tablosu alış ve satış fatura bilgileri ile beraber oldukça veri içeriyor. Dönemler tablosunda da ocak, şubat, mart... şeklinde ay isimleri mevcut. Benim almak istediğim sorgu sonucu hareketler tablosundaki stok alış adet ve satış adetlerini ayrı ayrı toplayım, month fonksiyonunu kullanarak aylık alış ve satış adetlerini raporlarmak. Alışlar ve satışlar aynı tablo içinde ve birbirinden 1 ve -1 diye 2 farklı değerler ayrılıyor . (alışlar : 1 , satışlar : -1 ).

Sorgum şöyle ;

SQL
  1. SELECT hareketler.stokadi , hareketler.stokkodu, SUM (hareketler.adet) AS toplam, donemler.ayadi
  2. FROM hareketler
  3. RIGHT OUTER JOIN donemler
  4. ON MONTH(hareketler.belgetarihi) = donemler.aykodu
  5. WHERE hareketler.harekettipi = 1
  6. GROUP BY hareketler.stokkodu, hareketler.stokadi, donemler.ayadi,donemler.aykodu



Ben bu sorgu sonucunda ayların toplamlarını almak, hareket görmeyen aylarin toplamlarını null döndürmek istiyorum. Kısacası bana 12 ayın birden sorguda geri dönmesi gerekiyor. Hazırladığım rapor 12 aylık. Ancak SQL'in döndürüğü sonuç where ifadesinden dolayı şöyle ;
10 ASUS P5SL-MX/1333 40.00 MART
11 ASUS P5XL-MX/1333 70.00 MAYIS
14 ASUS X38 DDR2 GL 1310 10.00 HAZİRAN
14 ASUS X38 DDR2 GL 1310 350.00 MART
21 KINGSTON DDR 512MB 533 400.00 MART
35 SAMSUNG CDW DVD2 1 600.00 MART

Where ifadesinde hareketler.harekettipi = 1 dediğim için sadece alışı olan ayları getiriyor. ALmak istediğim rapor ;

Null Null Null Ocak
Null Null Null Şubat
10 ASUS P5SL-MX/1333 40.00 MART
14 ASUS X38 DDR2 GL 1310 350.00 MART
21 KINGSTON DDR 512MB 533 400.00 MART
35 SAMSUNG CDW DVD2 1 600.00 MART
Null Null Null Nisan
11 ASUS P5XL-MX/1333 70.00 MAYIS
14 ASUS X38 DDR2 GL 1310 10.00 HAZİRAN
Null Null Null Temmuz
Null Null Null Ağustos
Null Null Null Eylül
Null Null Null Ekim
Null Null Null Kasım
Null Null Null Aralık

Şeklinde olmalı. Bu sorgudan sonra datagrid'de istediğim şekli alabiliyor. Scalar fonksiyonlar ve iç içe sorgularla biryere varamadım. Hareket tipine de -1 dediğim an satış raporlarını almış olacağım. Gördüğünüz gibi bana 12 ayında ismi gerekiyor. Başka bir fikri, yöntemi olanlar yardım ederlerse çok sevinirim. Şimdiden teşekkürler.



  Alıntı
Bu mesajı beğenenler:
#2
Merhaba..

Hareketler tablosundaki biçim değikliğini ve kriteri ayrı bir sorguda oluşturun (ismine hareket diyelim)..:

SQL
  1. SELECT stokadi, stokkodu, MONTH([belgetarihi]) AS ay, adet, harekettipi
  2. FROM hareketler
  3. WHERE harekettipi=1



Sonra dönemler tablosunu bu sorgu ile ilişkilendirin..:

SQL
  1. SELECT stokadi, stokkodu, adet, SUM(ay) AS toplam, ayadi
  2. FROM donemler LEFT JOIN hareket ON donemler.aykodu = hareket.ay
  3. GROUP BY stokadi, stokkodu, adet, ayadi, aykodu
  4. ORDER BY aykodu



İstediğiniz sorgulamayı bu şekilde alabilirsiniz..



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  INNER JOIN ve FROM Kısmından Sonrasını Belirlemek monelogg 0 953 20-05-2013, 09:19
Son Mesaj: monelogg
  inner join ile 3 tabloya bağlanmak Orion 4 5.163 02-03-2011, 23:29
Son Mesaj: Orion
  inner join ile diğer 2 tablodan bağlantı yapmak Orion 2 2.635 17-10-2010, 20:24
Son Mesaj: Orion

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 2 Ziyaretçi