none
SQL DISTINCT Aynı Kayıtları teke çevirme problemim RRS feed

  • Genel Tartışma

  • Merhabalar ,

    bir tablom var . tabloda kayıtların Resim,Başlık olarak iki sütunu var . Bunları

    SELECT DISTINCT TOP 6 Baslik FROM Haberler

    ile birbirinin aynı olanları teke indiriyorum 

    fakat sorgunun içine Resim'i dahil ettiğimde resim adları birbirinden farklı olduğu için yine aynı kayıtlar listleniyor . 

    Bunu düzeltmenin bir yolu varmıdır ?

    • Değiştirilmiş Tür Ekrem Önsoy 10 Ocak 2017 Salı 18:12
    17 Ekim 2016 Pazartesi 08:37

Tüm Yanıtlar

  • Neyi düzeltmenin? Düzeltme deyince ortada bir hata olması lazım. Oysa söylediğiniz durum aynen olması gerektiği gibi çalışıyor.

    http://pgnchess.com
    http://dergikapaklari.com

    17 Ekim 2016 Pazartesi 09:14
  • durumu şöyle izah edeyim : benim tablomda haberler tutuluyor . bu haberlerin resim ve başlık bilgileri var .

    DISTINCT ile aynı Başlığa sahip haberlerin sadece bir tane getirilmesini hallediyorum . Fakat bu listelemede aynı zamanda DISTINCT ile tek kayıt getirirken Haberin resmide gelsin isteyince resim adları birbirinden farklı olduğu için sorgu çıktısı tüm haberleri getiriyor . oysaki istediğim hangi kayıt tek'e düşmüşse o kaydın resmide gelsin .

    Böyle bir şey mümkünmüdür ?

    Teşekkürler .

    17 Ekim 2016 Pazartesi 09:23
  • Hangi Resim?

    Söylediğiniz yapıya göre bir haber başlığı tablonuzda 5 kez geçiyor ise 5 farklı resim var aynı haber için. (Resimler aynı isimler farklı diyorsanız programlamanızda hata var demektir. Tablo yapınız zaten hatalı görünüyor ona hiç girmiyorum) Haber başlığını aynı olmasından dolayı teke indirebilir. Ama resmi neye göre seçecek?

    Yani SQL bu haberin başlığı bu resim olabilir diye bir tahminde bulunamaz. Resim adında tek bir farklılık SQL için farklı veri demektir. 


    http://pgnchess.com
    http://dergikapaklari.com


    • Düzenleyen Halil TAŞ 17 Ekim 2016 Pazartesi 10:19
    17 Ekim 2016 Pazartesi 10:19
  • durumu şöyle izah edeyim : benim tablomda haberler tutuluyor . bu haberlerin resim ve başlık bilgileri var .

    DISTINCT ile aynı Başlığa sahip haberlerin sadece bir tane getirilmesini hallediyorum . Fakat bu listelemede aynı zamanda DISTINCT ile tek kayıt getirirken Haberin resmide gelsin isteyince resim adları birbirinden farklı olduğu için sorgu çıktısı tüm haberleri getiriyor . oysaki istediğim hangi kayıt tek'e düşmüşse o kaydın resmide gelsin .

    Böyle bir şey mümkünmüdür ?

    Teşekkürler .

    Merhabalar,

    Distinct komutunun çalışma doğası gereği select içinde yazılan kolonların birleşimine göre tekilleştirir. Yani sizin örneğinizde sadece BASLIK yazdığınızda çıkan sonuç ile BASLIK, RESIM yazdığınızda çıkan sonucun aynı olmaması doğaldır. Buna yapacak birşeyiniz yok maalesef.

    Ancak, siz eğer her bir başlık için sadece 1 resim getirsin isterseniz bunu farklı yöntemlerle yapabilirsiniz. Ama burada da başlık için birden fazla resim olacağından hangi resimi alacağını kriter olarak belirtmeniz gerekir. (Örneğin resim_tarihi vb göre en son resim alınacak gibi).

    Bunun için aşağıdaki kod bloğunu gerekli değişiklikleri yaparak uygulayabilirsiniz:

    SELECT *
    FROM
    (
    SELECT baslik, resim,
    Row_Number() OVER(partition by baslik order by resim_tarih desc) as SiraNo
    FROM tablename
    )
    where Sirano = 1

    Umarım doğru anlayabilmişimdir :)


    Please Mark This As Answer if it solved your issue
    Please Vote This As Helpful if it helps to solve your issue
    www.abdullahaltintas.com

    17 Ekim 2016 Pazartesi 13:29
  • Öncelikle cevabınız için teşekkürler 

    Belirttiğim tabloda sadece bir haberin sadece bir resmi ve birde başlığı var zaten ilgili habere ait birden fazla toplu resimleri farklı bölümde farklı sorguyla çekiyorum . o yüzden sıralama yapmama gerek yok sanırım . 

    bir haberden aynı başlığa sahip 3 tane olduğunu ve bunların resimlerininde dosya adı olarak farklı olduğunu düşünelim . işte olay burda sıkıntıya dönüşüyor . haber başlığı ile resim adları aynı olsa dıstınct bu işi yapıcak ama 

    yinede galiba bunun bir çözümü bulunmuyo :)

    18 Ekim 2016 Salı 07:42
  • Ercan bey bir örnek, yapı veya neden öyle olduğunu açıklamadığınız için iş böyle kulaktan kulağa oynamaya dönüyor.

    şu son yazdığınız mesajı bir okuyun ama konuya yabancı biri gibi. 

    Şimdi bu tablonun yapısı nasıl ?

    eğer sadece HaberBasligi, HaberResmi gibi iki alandan oluşuyor ise evet siz sadece tek resmi getirme işlemini distinc ile yapamazsınız.

    Ama

    HaberID, TarihSaat,HaberBasligi,HaberResmi gibi alanlarda var ise bir seçim yaparak yapabilirsiniz. Örneğin en son girilen başlığın resmi derseniz

    SELECT 
          HaberBasligi
          ,HaberResmi
      FROM Haberler h where TarihSaat=(select Max(TarihSaat) from Haberler where HaberBasligi=h.HaberBasligi)

    gibi bir sorgu ile en son girilen haberin resmi ile basligi alabilirsiniz. 



    http://pgnchess.com
    http://dergikapaklari.com

    18 Ekim 2016 Salı 08:25
  • Select

    Distinct TOP 6 Baslik

    ,  (Select  Top 1 Resimler FROM Haberler H2  Where H2.Baslik = H1.Baslik ) as Resimler

    FROM Haberler H1

    13 Şubat 2017 Pazartesi 19:43
  • create table #TEST
    (id int not null identity(1,1),
     Haber nchar(20),
     Resim nchar(20)
     )
     go
     insert #TEST
     values
     (N'haber1',N'hb1 in 1 ci resmi')
    insert #TEST
     values
     (N'haber1',N'hb1 in 2 ci resmi')
     insert #TEST
     values
     (N'haber1',N'hb1 in 3 cu resmi')
     insert #TEST
     values
     (N'haber2',N'hb2 nin 1 ci resmi')
    insert #TEST
     values
     (N'haber2',N'hb2 nin 2 ci resmi')
     insert #TEST
     values
     (N'haber2',N'hb2 nin 3 cu resmi')
     
     select * from #TEST
    
    
    
     SELECT id,haber,resim
    FROM #TEST AS P1
    WHERE id =
      (SELECT MIN(id)
       FROM #TEST AS P2
       WHERE P2.haber = P1.haber)
    
    
    
    --------------------------------------------
    (1 row(s) affected)
    
    (1 row(s) affected)
    
    (1 row(s) affected)
    
    (1 row(s) affected)
    
    (1 row(s) affected)
    
    (1 row(s) affected)
    id          Haber                Resim
    ----------- -------------------- --------------------
    1           haber1               hb1 in 1 ci resmi   
    2           haber1               hb1 in 2 ci resmi   
    3           haber1               hb1 in 3 cu resmi   
    4           haber2               hb2 nin 1 ci resmi  
    5           haber2               hb2 nin 2 ci resmi  
    6           haber2               hb2 nin 3 cu resmi  
    
    (6 row(s) affected)
    
    id          haber                resim
    ----------- -------------------- --------------------
    1           haber1               hb1 in 1 ci resmi   
    4           haber2               hb2 nin 1 ci resmi  
    
    (2 row(s) affected)
    
    
    
    
    
    
    
    

    26 Mart 2017 Pazar 14:16
  • Ercan bey bir örnek, yapı veya neden öyle olduğunu açıklamadığınız için iş böyle kulaktan kulağa oynamaya dönüyor.

    şu son yazdığınız mesajı bir okuyun ama konuya yabancı biri gibi. 

    Şimdi bu tablonun yapısı nasıl ?

    eğer sadece HaberBasligi, HaberResmi gibi iki alandan oluşuyor ise evet siz sadece tek resmi getirme işlemini distinc ile yapamazsınız.

    Ama

    HaberID, TarihSaat,HaberBasligi,HaberResmi gibi alanlarda var ise bir seçim yaparak yapabilirsiniz. Örneğin en son girilen başlığın resmi derseniz

    SELECT 
          HaberBasligi
          ,HaberResmi
      FROM Haberler h where TarihSaat=(select Max(TarihSaat) from Haberler where HaberBasligi=h.HaberBasligi)

    gibi bir sorgu ile en son girilen haberin resmi ile basligi alabilirsiniz. 



    http://pgnchess.com
    http://dergikapaklari.com

    hocam 2 sene geçmiş ama çok teşekkürler cevabınız için. 2 haftadır benzer bir sorunla karşılaşıyordum sayenizde çözdüm çok saolun.
    7 Aralık 2018 Cuma 18:14