En iyi yanıtlayıcılar
Sorgu

Soru
-
ilişkili 3 tablom var biri müşteri diğeri mulkiyet ve son olarakta ödeme tablolarım
yapmak istediğim örneğin mustID=15 olan bir kişinin yaptığı işler workID=154
workID=155
workID=156
şeklinde iş workID leri alıyor ;ve bu workID lerin herbirine de Odemeler yaptırıyorum sıkıntı su
yukarıdaki örnekte mustID 15 olan bir kişinin her iş için yapmış olduğu ödemeleri hangi iş ile ilgiliyse onun altında
görüntülemek istiyorum SQL de bunu nasıl yapabilirim şimdiden teşekkürler;
Yanıtlar
-
Konu Güncel ;
tamamen tabloları yukarıdaki gibi yaptım ve sonuç yine aynı;
SELECT * FROM OdemeBase O INNER JOIN MulkiyetBase M ON (M.workID=O.workID) WHERE O.OdemeMustID=@ID Order by o.workID;
yardımlarınız için teşekkürler;
- Yanıt Olarak İşaretleyen Kenan YILMAZ 8 Ekim 2014 Çarşamba 23:48
Tüm Yanıtlar
-
select ...
from Musteri
join Mulkiyet on Musteri.mustID=Mulkiyet.mustID
join Odemeler on Mulkiyet.workID=Odemeler.workID
where Musteri.mustID=15
order by workID- Düzenleyen Azure.mbaykan 13 Eylül 2014 Cumartesi 07:49 ilave
- Yanıt Olarak Öneren CetinBasoz 13 Eylül 2014 Cumartesi 11:39
-
OVER(ORDER BY ifadeleri ile ROW_NUMBER() 'ı çıkartın bakalım 'alakasız' veriler mi? geliyor.
örnek veri setinizle yardımcı olmaya çalışırım.
Musteriler - Mulkiyet - Odemeler
tablolarını INNER JOIN ile ilşikilendirip mustID'yi filtrelediğinizde istediğiniz kayıtların gelmesi gerekir
- Düzenleyen Azure.mbaykan 13 Eylül 2014 Cumartesi 09:36 update
-
select * from Musteri inner join Mulkiyet on Musteri.mustID=Mulkiyet.mustID inner join Odemeler on Mulkiyet.workID=Odemeler.workID where Musteri.mustID=1 order by workID, odemeTarihi desc
Azure bey'inkinden genisletilmis hali. Sonuclari workID'ye gore siraliyor, ayni workID'ye sahip olanlari da son tarihten geriye dogru.
Not: Tabii bu sorgu Linq ile cok daha basit:
var musteriDetay = db.Musteriler.Single( m => m.mustID == 1 );
Nasil olsa istedigin kadar detayini "dot notation" ile aliyorsun.
-
http://blogs.msdn.com/b/sqlforum/archive/2011/01/03/walkthrough-add-a-subreport-in-local-report-in-reportviewer.aspx
subreport kullanımını anlatıyor
4. maddedeki subreport parametre'yi doğru set etmemişsiniz.- Düzenleyen Azure.mbaykan 13 Eylül 2014 Cumartesi 15:09 update
-
benim subreport ile sıkıntı yok zaten verileri subreport a gönderiyorum burada kullandığım yöntem mi yanlış yani SQL ile yazdığım mantık mı hatalı? yada direkt dataset ile mi yapmalıyım? sonuçta oda sql isteyecek?
verdiğiniz adress biraz SSRS raporlama gibi?- Düzenleyen Kenan YILMAZ 13 Eylül 2014 Cumartesi 15:14
-
-
aslında düşündüm ama mantığını kuramadım yukarıda dikkat ettiyseniz ? belki nasıl bir yol izlemeliyim? fakat bir müşterinin bir den fazla işi var sql veya proc ?
- Düzenleyen Kenan YILMAZ 13 Eylül 2014 Cumartesi 15:25
-
SQL deOdemeData.OdemeRaporuGoster(must_ID)
Odemeler'den must_ID'nin tüm ödemelerini alıyor
OdemeData.OdemeRaporuGoster2(must_ID,work_ID) gibi 2. bir metod'a ihtiyacınız var filtreleme doğru olmuyor
WHERE mustID=@mustID AND workd_ID=@workID
ile filtrelenmeli- Düzenleyen Azure.mbaykan 13 Eylül 2014 Cumartesi 15:32 upd
-
-
-
-
2. raporda
public static List<dsOdemeFields> OdemeRaporuGoster2(Int64 mustID, Int64 workID) { List<dsOdemeFields> OdemeListelesi = new List<dsOdemeFields>(); { using (SqlConnection conn = new SqlConnection(dboConnection.Baglanti)) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "Select odeme.OdemeMustID,odeme.OdemeNakitSekli,odeme.OdemeTarih,odeme.OdemeSaat,odeme.OdemeAciklama,odeme.OdemeNakit " + "From MulkiyetBase mulk inner join OdemeBase odeme ON mulk.workID=odeme.workID Where odeme.OdemeMustID=@mustID and Odeme.workID=@workID order by odeme.workID,odeme.OdemeTarih desc;"; cmd.Parameters.AddWithValue("@mustID", mustID); cmd.Parameters.AddWithValue("@workID", workID); SqlDataReader dr; conn.Open(); dr = cmd.ExecuteReader(); dsOdemeFields OdemeOku = new dsOdemeFields(); while (dr.Read() == true) { try { // OdemeOku.sirano = Convert.ToInt32(dr["RowNumber"].ToString()); // OdemeOku.workID = Convert.ToInt64(dr["workID"].ToString()); OdemeOku.mustID = Convert.ToInt64(dr["OdemeMustID"].ToString()); OdemeOku.tarih = Convert.ToDateTime(dr["OdemeTarih"].ToString()); OdemeOku.saat = Convert.ToDateTime(dr["OdemeSaat"].ToString()); OdemeOku.aciklama = dr["OdemeAciklama"].ToString(); OdemeOku.odemesekli = dr["OdemeNakitSekli"].ToString(); OdemeOku.toplamodenen =Convert.ToDecimal(dr["OdemeNakit"].ToString()); //OdemeOku.odemeID = Convert.ToInt64(dr["OdemeNakitID"].ToString()); } catch (SqlException exp) { MessageBox.Show(text: "Hatalı İşlem Lütfen Bildiriniz !!" + exp.Message, caption: "Hatalı Sorgu", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Information); } OdemeListelesi.Add(OdemeOku); } conn.Close(); } return OdemeListelesi; }
metodunu ilave edip
subreport ta da bu metod ile dataseti doldurmalısınız -
sanırım anlatamadım bir müşteriye ait bir sürü iş ID var? zaten sıkıntı olan burası yani çözüm noktası burası ?
- Düzenleyen Kenan YILMAZ 13 Eylül 2014 Cumartesi 17:07
-
Tablo yapıları ve primary key'leri sorunuzun ilk bölümünde şöylle tanımladınız değil mi?
Musteri tablosu PK mustID
Mulkiyet tablosu PK workID bir müşterinin 1'den fazla Mülkiyeti (işi) var ve mustID de bu tabloda FK
Odemeler tablosu PK ID (bilmiyoruz, ama önemi bu rapor için yok) . workID FK, bir mülke ait birden fazla ödeme var. odemeMust_ID , bu tabloda var rapor için olması iyi. workID ve mustID'yi birlikte filtreleyebiliriz (Rapor da zaten bunu yapıyor. Odemeler tablosunu figer 2 tablo ile JOIN lememize gerek kalmıyor.
benim tablo yapısından anladığım bu. Verdiğim ek Metod ile subreport'ta doğru filtreleme yapabilirsiniz
-
Konu Güncel ;
tamamen tabloları yukarıdaki gibi yaptım ve sonuç yine aynı;
SELECT * FROM OdemeBase O INNER JOIN MulkiyetBase M ON (M.workID=O.workID) WHERE O.OdemeMustID=@ID Order by o.workID;
yardımlarınız için teşekkürler;
- Yanıt Olarak İşaretleyen Kenan YILMAZ 8 Ekim 2014 Çarşamba 23:48