none
bir sql hatam var yardımcı olurmusunuz.

    Soru

  • Merhaba iki tane tablom var ve istediğim veriyi çekemiyorum. Yardımcı olurmusunuz.

    İstediğim şu: iki tabloyu karşılaştıracak t1 ile t2 tablosunu karşılaştırıyor. t2 de olmayan HaftalikGorusmeID  si olan t1 dekileri gösterecek tabi bugünün tarihinden küçük olanlar ve alınmayan randevuları gösterecek. ben kodu yazıyorum tam tersini yapıyor yani olanları gösteriyor.

    sql kodum şu şekilde.

    SELECT        t1.HaftalikGorusmeID AS Expr2, t2.HaftalikGorusmeTablosuID, t2.KurumKodu, t2.HaftalikGorusmeID, t2.Tarih, t2.OgrenciID, t1.OgretmenID
    FROM            dbo.HaftalikGorusme AS t1 LEFT OUTER JOIN
                             dbo.HaftalikGorusmeTablosu AS t2 ON t1.HaftalikGorusmeID = t2.HaftalikGorusmeID
    WHERE        (CONVERT(date, t2.Tarih) >= CONVERT(date, GETDATE()))

    T1 TABLOM

    T2 TABLOM

    SORGUMDAKİ HATALI SONUCUM

    NE OLMASI GEREKİYOR.

    1006 VE 2006  yı göstermesi lazım.

    yardımlarınız için teşekkür ederimm.


    • Düzenleyen CÜNEYT.A 14 Haziran 2017 Çarşamba 21:06
    14 Haziran 2017 Çarşamba 21:00

Yanıtlar

  • SELECT 
    HaftalikGorusmeID, KurumKodu, OgretmenID, 0 AS OgrenciID, NULL AS Tarih
    FROM 
    dbo.HaftalikGorusme
    WHERE 
    NOT HaftalikGorusmeID IN (SELECT HaftalikGorusmeID FROM  dbo.HaftalikGorusmeTablosu) 
    UNION ALL 
    SELECT HaftalikGorusmeID, KurumKodu, OgretmenID, OgrenciID, Tarih
    FROM HaftalikGorusmeTablosu
    WHERE
    (CONVERT(date, Tarih)>=CONVERT(date, GETDATE()))

    • Düzenleyen MuratAKSARAY 14 Haziran 2017 Çarşamba 22:38
    • Yanıt Olarak İşaretleyen CÜNEYT.A 14 Haziran 2017 Çarşamba 23:10
    14 Haziran 2017 Çarşamba 21:28
  • Geçmiş randevular için sadece >= yerine < kullanmanız yeterlidir...

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen CÜNEYT.A 14 Haziran 2017 Çarşamba 23:09
    14 Haziran 2017 Çarşamba 23:06

Tüm Yanıtlar

  • SELECT 
    HaftalikGorusmeID, KurumKodu, OgretmenID, 0 AS OgrenciID, NULL AS Tarih
    FROM 
    dbo.HaftalikGorusme
    WHERE 
    NOT HaftalikGorusmeID IN (SELECT HaftalikGorusmeID FROM  dbo.HaftalikGorusmeTablosu) 
    UNION ALL 
    SELECT HaftalikGorusmeID, KurumKodu, OgretmenID, OgrenciID, Tarih
    FROM HaftalikGorusmeTablosu
    WHERE
    (CONVERT(date, Tarih)>=CONVERT(date, GETDATE()))

    • Düzenleyen MuratAKSARAY 14 Haziran 2017 Çarşamba 22:38
    • Yanıt Olarak İşaretleyen CÜNEYT.A 14 Haziran 2017 Çarşamba 23:10
    14 Haziran 2017 Çarşamba 21:28
  • Murat bey öncelikle canı gönülden teşekkür ederim.Allah başımızdan eksik etmesin. sayenizde bir çok problemleri çözdüm. bunu belirtmek isterim.

    vermiş olduğunuz kodu deniyorum boş sonuç geliyor :(

    14 Haziran 2017 Çarşamba 21:37
  • ASLINDA YAPMAK İSTEDĞİM ŞU. RANDEVU ALINAN VEYA RANDEVU TARİHİ GEÇEN HARİÇ OTOMATİK HAFTALIK TEKRAR RANDEVU HAZIRLAYIP GÖSTERECEK. RANDEVULAR GÜN BAZINDA YANİ RANDEVU GÜNÜ PAZARTESİ OLARAK EKLENDİĞİNDE ÖNÜMÜZDEKİ İLK PAZARTESİ TARİHİNİ GÖSTERİYOR.TABİ BU PAZARTESİ RANDEVU ALINDIYSA GÖSTERMEYECEK. EĞER BU GÜN SALI İSE OTOMATİK HAFTAYA PAZARTESİ RANDEVU TARİHİ VERECEK. AŞAĞIDA KODUM UMARIM NE YAPMAK İSTEDİĞİMİ ANLATABİLMİŞİMDİR.

     DataTable dtOgretmenRandevu = klas.GetDataTable("SELECT t1.HaftalikGorusmeID AS Expr2, t2.HaftalikGorusmeTablosuID, t2.KurumKodu, t2.HaftalikGorusmeID, t2.Tarih, t2.OgrenciID, t1.OgretmenID "+
    " FROM dbo.HaftalikGorusme AS t1 INNER JOIN "+
                          "   dbo.HaftalikGorusmeTablosu AS t2 ON t1.HaftalikGorusmeID = t2.HaftalikGorusmeID "+
    " WHERE        (NOT (t1.HaftalikGorusmeID IN "+
                                " (SELECT        HaftalikGorusmeID "+
                                 "  FROM            dbo.HaftalikGorusmeTablosu))) AND (CONVERT(date, t2.Tarih) >= CONVERT(date, GETDATE()))");
                    int satirsayisi = dtOgretmenRandevu.Rows.Count;
    
                    for (int i = 0; i < satirsayisi; i++)
                    {
    
                        int OgretmeninRandevusu = Convert.ToInt32(dtOgretmenRandevu.Rows[i][2]);
    
                        
                       
                        DateTime bugun = DateTime.Now;
    
                        int fark = OgretmeninRandevusu < (int)bugun.DayOfWeek ? (7 + OgretmeninRandevusu - (int)bugun.DayOfWeek) : (OgretmeninRandevusu - (int)bugun.DayOfWeek);
                        DateTime RandevuTarihi = bugun.AddDays(fark);
    
                        tarih = Convert.ToDateTime(RandevuTarihi);
                        HaftalikGorusmeID = dtOgretmenRandevu.Rows[i][0].ToString();
                        OgretmenID = dtOgretmenRandevu.Rows[i][7].ToString();
    
                        ListBox1.Items.Add(dtOgretmenRandevu.Rows[i][5] + " - " + dtOgretmenRandevu.Rows[i][6] + " - " + RandevuTarihi.ToString("dd-MM-yyyy") + " - " + dtOgretmenRandevu.Rows[i][3] + " - " + dtOgretmenRandevu.Rows[i][4]);

    14 Haziran 2017 Çarşamba 22:26
  • Düzenlenen haliyle dener misiniz.?.

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    14 Haziran 2017 Çarşamba 22:38
  • murat bey ben birşey kaçırıyorum. teamviewer versem size bağlanma imkanınız varmı?
    14 Haziran 2017 Çarşamba 22:44
  • vermiş olduğunuz sql kodunun resmini gösteriyorum. tam tersi olması lazım. bana geçmiş tarihli ve alınmayan randevuyu göstermesi lazım sizinkinde şöyle görünüyor. şuanki tarih ve geçmemiş tarihli vede null olan bir veri getiriyor.

    14 Haziran 2017 Çarşamba 22:51
  • null olayı doğru yakalamış. tek sorun geçmiş tarihli ve null olan HaftalikGorusmeID lerini gösterecek.
    14 Haziran 2017 Çarşamba 22:54
  • yanii.. alınan ve şuan için tarihsel olarak geçerli olan randevular hariç. geçmiş tarihlileri ve hiç randevu alınmamış randevuları gösterecek. Buda HaftalikGorusmeID olanı istiyorum.
    14 Haziran 2017 Çarşamba 22:56
  • Geçmiş randevular için sadece >= yerine < kullanmanız yeterlidir...

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen CÜNEYT.A 14 Haziran 2017 Çarşamba 23:09
    14 Haziran 2017 Çarşamba 23:06
  • harikasınız.....

    Çook ama çookk teşekkür ederim. istediğim buydu...

    Çok sağolunn.. hakkınızı helal edin. gecenin bu vaktinde sizi oyaladım.

    14 Haziran 2017 Çarşamba 23:09