Ms Sql Distinct

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Ms Sql Distinct

Mesaj gönderen tuna »

Arkadaşlar sql de distinct yapmayı bir türlü beceremedim. Yada benim istediğim gibi olmuyor.

sorunum şu :

Kod: Tümünü seç

select Distinct malzeme_kayitno, diğer bütün fieldlarım from tablom where .....
buradaki problem ben sadece malzeme_kayitno' ya göre distinct yapsın istiyorum diğerlerine göre bi gruplama yapmasın. Ama diğer fieldlarıda görebiliyim. Oan diğer fieldlar için hangi veriyi getirdiği önemli değil.
Görünsünler yeter.

Şimdiden Teşekürler.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Ms Sql Distinct

Mesaj gönderen aslangeri »

s.a.
eğer diğer alanlardaki değerler önemli değilse şöyle bişey yapabilirsin.

Kod: Tümünü seç

select distinct malzeme_kayitno, 'herhangi bir değer' alanadi, 0 alanadi2, 'alantipine göre bir değer' alanadi3 from tablom
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Ms Sql Distinct

Mesaj gönderen conari »

Diğer alanları doğal olarak listeleyemezsiniz.
@Aslangeri'nin dediğini yapabilirsiniz. ama zaten biliyorsanız bu şekilde select etmeninde bir mantığı yok gibi.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Ms Sql Distinct

Mesaj gönderen tuna »

aslangeri yazdı:s.a.
eğer diğer alanlardaki değerler önemli değilse şöyle bişey yapabilirsin.

Kod: Tümünü seç

select distinct malzeme_kayitno, 'herhangi bir değer' alanadi, 0 alanadi2, 'alantipine göre bir değer' alanadi3 from tablom
kolay gelsin.
Gerçekten süper bi yöntem miş..

Peki kodun kolay yazımı açaısından şöyle birşey yapılabilirmi veya nasıl yapılır

Kod: Tümünü seç

select distinct malzeme_kayitno, * from tablom


gibi birşey. Çünkü çok fazla field varda. ve bütün fieldların nesneye gelmesi gerekiyor. kayıt no gruplansın gösterilsin yeter. diğerleri önemli değil. ama dediğim gibi diğerlerinin alan olarak gelmesi gerekiyor.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Ms Sql Distinct

Mesaj gönderen akdatilla »

Merhaba, kendi veritabanımdaki bir tabloya göre bir örnek hazırladım.
Sanırım bu koda göre kendi işini çözebilirsin.

Kod: Tümünü seç

SELECT DISTINCT T1.SFB_SFA,T4.* FROM SFISB AS T1
INNER JOIN 
(SELECT T2.SFB_SFA,MIN(T2.SFB_ID) AS MINID FROM SFISB AS T2 GROUP BY T2.SFB_SFA) AS T3 ON (T1.SFB_SFA=T3.SFB_SFA)
INNER JOIN SFISB AS T4 ON (T3.MINID=T4.SFB_ID)
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Ms Sql Distinct

Mesaj gönderen tuna »

Cevap veren herkese teşekkürler. @aslangeri arkadaşımıza ayrıca teşekür bilmediğim birşeyi öğretti. Selectten sonra field'a değer girebileceğimi bilmiyordum.

Sorunu view hazırlayarak çözdüm, view da group by yaptım işime yaramayan alanları count yaparak saydırdım. böylece alanlar gelmiş oldu ama o alanlara göre guruplama yapılmamış oldu. bende uzun uzun kod yazmaktan kurtulmuş oldum.

Kod şu şekilde

Kod: Tümünü seç

SELECT  SIPARIS.ID, SIPARIS.CARIKODU, CARI.UNVAN, SIPARIS.ACIKLAMA, SIPARIS.DURUMU, SIPARIS.OZELKODU, 
                      SIPARIS.SIPARISNO, SIPARIS.TARIHI, SIPARIS.SAATI, SIPARIS.VADESI, SIPARIS.TERMIN, 
                      SIPARIS.MUS_SIPARISNO, SIPARIS.ISK_ORANI, SIPARIS.EK1, SIPARIS.EK2, SIPARIS.TOPLAM, 
                      SIPARIS.ISK_TOPLAMI, SIPARIS.ARA_TOPLAM, SIPARIS.KDV, SIPARIS.GENEL_TOPLAM, SIPARIS.BL_CR_KODU, 
                      SIPARIS.OKUNDU, SIPARIS.OKUYAN, SIPARIS.ISK_TUTARI, SIPARIS.MUSTERI_DOSYA_ADI, SIPARIS.DURUMU_ITEMS, 
                      COUNT(SIPARIS_HRK.NUMUNE_KODU) AS NUMUNE_KODU, COUNT(STOK.STOKKODU) AS STOKKODU, COUNT(STOK.STOK_ADI) 
                      AS STOK_ADI, COUNT(STOK.ACIKLAMA1) AS ACIKLAMA1
FROM         SIPARIS INNER JOIN
                      CARI ON SIPARIS.CARIKODU = CARI.CARI_KODU LEFT OUTER JOIN
                      SIPARIS_HRK ON SIPARIS.SIPARISNO = SIPARIS_HRK.SIPARIS_KODU LEFT OUTER JOIN
                      STOK ON SIPARIS_HRK.STOK_KODU = STOK.STOKKODU
GROUP BY SIPARIS.ID, SIPARIS.CARIKODU, CARI.UNVAN, SIPARIS.ACIKLAMA, SIPARIS.DURUMU, SIPARIS.OZELKODU, 
                      SIPARIS.SIPARISNO, SIPARIS.TARIHI, SIPARIS.SAATI, SIPARIS.VADESI, SIPARIS.TERMIN, 
                      SIPARIS.MUS_SIPARISNO, SIPARIS.ISK_ORANI, SIPARIS.EK1, SIPARIS.EK2, SIPARIS.TOPLAM, 
                      SIPARIS.ISK_TOPLAMI, SIPARIS.ARA_TOPLAM, SIPARIS.KDV, SIPARIS.GENEL_TOPLAM, SIPARIS.BL_CR_KODU, 
                      SIPARIS.OKUNDU, SIPARIS.OKUYAN, SIPARIS.ISK_TUTARI, SIPARIS.MUSTERI_DOSYA_ADI, SIPARIS.DURUMU_ITEMS
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ms Sql Distinct

Mesaj gönderen sabanakman »

Maksat aynı alan yapısının gelmesi ise ve bir ID gibi her kayda farklı numara veren bir alan değeri varsa örnekteki teknikte işe yaracaktır.

Kod: Tümünü seç

select * from TABLO where ID in (select min(ID) from TABLO group by ALAN)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Ms Sql Distinct

Mesaj gönderen akdatilla »

sabanakman yazdı:Maksat aynı alan yapısının gelmesi ise ve bir ID gibi her kayda farklı numara veren bir alan değeri varsa örnekteki teknikte işe yaracaktır.

Kod: Tümünü seç

select * from TABLO where ID in (select min(ID) from TABLO group by ALAN)
:bravo:
Benim yaptığım örnek bunun yanında kulağını tersten göstermek gibi oldu :oops:
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Ms Sql Distinct

Mesaj gönderen tuna »

Çok teşekürler arkadaşlar. Gerçekten güzel örnekler bunlar. Sql'in derinliklerini öğreniyoruz. Bir şeyi yapmanın birsürü yöntemi olduğunu öğreniyoruz...
Hepinize tekrar tekrar teşekürler.
Cevapla