Soran
SQL DISTINCT Aynı Kayıtları teke çevirme problemim

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
Tüm Yanıtlar
-
-
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 .
-
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
-
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 -
Ö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 :)
-
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 -
-
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)
-
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