SQL Yardım - Birden fazla tekrarlı kayıtlar

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ı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

SQL Yardım - Birden fazla tekrarlı kayıtlar

Mesaj gönderen naile »

Bir sorgu yazmam lazım ama bir türlü kısa bir yol bulamadım.

Yapmak istediğim şu:

SORU 1


Şöyle bir tablom var:
ID; Sırayla artan bir alan (1,2,3.. şeklinde)
UrunID; Bu alanbirden fazla tekrarlanabiliyor
Deger; Bu alanda da herhangi bir değer tutuluyor.

Şimdi benim bu tablomda şöyle bir veri tutulabilir:

Kod: Tümünü seç

ID   UrunID   Deger
1        A           5
2        A           7
3        A           3
4        B           5
Dönecek değer:

Kod: Tümünü seç

UrunID  Deger
A            3
B            5
Yani urunid birden fazla satırda tekrarlanarak değişik değerler alabiliyor.

Benim almak istediğim ise her ürün için tek satır seçmek ama ID si en büyük olan Deger'i almak! Bunu Top veya Max la falan alamıyorum. Ancak ürünlere tek tek bakarak yapabildim ama tablodaki veri sayısı çok büyüyebileceği için çok uzun zaman alıyor. Bunun kısa bir yolu yok mu?



Eğer bu soru hoşunuza gitmediyse veya cevabını bilmiyorsanız şu sorunun cevabı da işimi görür aslında :D

SORU 2


INSERT INTO ..
SELECT..

Şeklinde bir insert cümlem var, bu cümleyi bir döngünün içinde çalıştırıyorum ve döngü içinde bu cümle her çalıştığında birbirinin aynısı olan değerler gelebiliyor. Insert ederken eğer kayıt yoksa insert varsa update yapabilme şansım olsa hiç bir sorunum kalmayacak. Eğer bunda da tek tek kontrol ederek ona göre 2 ayrı cümle yazmam gerekiyorsa bu da benim işimi çok uzayor maalesef.


Umarım bunlardan biri için kısa ve hızlı çözüm vardır.
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

birinci sorunun şöyle olabileceğini düşünüyorum

select urunid, max(deger)
from tablo
group by urunid
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Re: SQL Yardım - Birden fazla tekrarlı kayıtlar

Mesaj gönderen ylmz »

pardon

yanlış anladım, en büyük değer olarak okumuşum soruyu.

bi bakayım
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

 select max(deger),urunid from table
 where urudid = (select DISTINCT urunid from table)
böyle birşey çalışırmıki m$de :? tutmayabilirde salladım :)
.-.-.-.-.-.-.-. ^_^
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Şu SQL işinizi görecektir:

Kod: Tümünü seç

SELECT
  DISTINCT T1.UrunID,
  (SELECT TOP 1 T2.Deger FROM TABLO T2 WHERE T2.UrunID = T1.UrunID ORDER BY T2.ID DESC) AS Deger
FROM TABLO T1
İyi çalışmalar.
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

şöyle çalışması lazım

Kod: Tümünü seç

select *
from tablo
where
 id in(select max(id)
        from tablo
        group by urunid)

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Ya 5-10 satır aşağısında başka bir sorgu için iç select kullandığım halde bunda kullanmayı akıl edememişim iyi mi :)

Teşekkürler arkadaşlar, Hakan Can'ın örneğindeki gibi iç select ile hallettim. 10.000 küsür kayıt için de saniye bile sürmeden getiriyor sonucu.
Cevapla