none
Sorgu RRS feed

  • 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;

    12 Eylül 2014 Cuma 18:45

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
    20 Eylül 2014 Cumartesi 13: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
    13 Eylül 2014 Cumartesi 04:57
  • 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
    13 Eylül 2014 Cumartesi 09:35
  • 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.

    13 Eylül 2014 Cumartesi 11:46
  • 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
    13 Eylül 2014 Cumartesi 15:05
  • 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?
    13 Eylül 2014 Cumartesi 15:11
  • void SubReportDoldur(object sender, SubreportProcessingEventArgs e) { Int64 must_ID = Convert.ToInt64(e.Parameters["per_ID"].Values[0].ToString());

    per_ID 'yerine mustID olması gerek miyor mu?

    işlerin Müşteri bazında raporlanması için

    13 Eylül 2014 Cumartesi 15:20
  • 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 ?

    13 Eylül 2014 Cumartesi 15:23
  • OdemeData.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

    SQL de
    WHERE mustID=@mustID AND workd_ID=@workID 
    ile filtrelenmeli
    13 Eylül 2014 Cumartesi 15:28
  • o zaman mülkiyet tablosundaki ve ödemeler tablosundaki workID lerini eşleştirip hangi iş ile ilgili ise o işin altına gittsin? belki stored procedures ile yapma imkanı var mı?

    13 Eylül 2014 Cumartesi 15:41
  • OdemeData class'ında OdemeRaporuGoster metodunu kopyalayıp (OdemeRaporuGoster2) SQL ifadesine, önceki yanıtımda yazdığım must_ID ile work_ID yi beraber filtreleyen bolumu ilave ederseniz olur.

    eğer bunu yazamıyor iseniz, olmaz

    13 Eylül 2014 Cumartesi 15:46
  • benim için problem değil sadece biraz karmaşık çalışıyorum sanırım sizin için problem olmaz ise;
    13 Eylül 2014 Cumartesi 15:49
  • 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

    13 Eylül 2014 Cumartesi 16:30
  • 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ı ? 

    13 Eylül 2014 Cumartesi 16:40
  • 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 

    14 Eylül 2014 Pazar 04:20
  • 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
    20 Eylül 2014 Cumartesi 13:48