Skip to main content

AccessTr.neT


Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme

Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme

Çözüldü #1
Merhabalar,
Ustalarımız,   https://accesstr.net/konu-sorguya-sira-n...tml?page=2   konusunda tek kritere göre sorguda sıra numarası eklemeyi çok güzel örneklendirmişler. Fakat üzerinde çalıştığım bir projede birden fazla kritere göre sıra numarası vermem gerekiyor.
Örneğin, https://accesstr.net/konu-sorguya-sira-n...2#pid17632   cevabında mehmetdemiral beyin eklediği örnekteki tablonun oto alanının Otomatik Sayı değil sadece Sayı olduğunu düşünürsek ve oto alanında birden fazla eşit değer olması durumunda sıra numarası 1 atlayıp kaç eşit değer varsa o kadar aynı sayı oluyor. bu durumda öncelikle oto alanı ardından tarih alanına göre sıra numarası nasıl verebiliriz?
Örneğin (yukarıdaki linkteki örnekteki oto alanı Sayı olmak kaydıyla);
tablo verilerimiz şu şekilde olduğunda:
oto       tarih       adsoyad
1    1.01.2009    ALİ VELİ
2    1.01.2009    AHMET MEHMET
5    10.04.2009  AYİE FSKŞLKS
7    11.04.2009  MEHMEKKS K Ş
7    20.04.2009  DKJŞLWKC KŞLKŞ

Sorgu sadece oto sayısını baz aldığı için sonucu da şöyle olmaktadır:

tarih                 adsoyad                    sırano

1.01.2009       ALİ VELİ                        1

1.01.2009       AHMET MEHMET       2

10.04.2009     AYİE FSKŞLKS               3

11.04.2009     MEHMEKKS K Ş           5

20.04.2009     DKJŞLWKC KŞLKŞ         5



Sorgu Sonucunda son 2 satırın sıra numaralarının 4 ve 5 olması için tarih kısıtını da (küçükten büyüğe) nasıl sorguya dahil edebilirim?

Saygılarımla.
Cevapla
#2

SQL Code
SELECT GTablo.tarih, GTablo.adsoyad, (select count([oto]) from Tablo1 where [oto]<=GTablo.[oto] and [tarih]<=GTablo.[tarih]) AS sirano FROM Tablo1 AS GTablo;


Şeklinde kritere tarih eklenmeli.

"Boş Örnek Eklerim, Yapıp Verirler" demeyin, örneğinizi hazırlayın.
Komplike kod talebiniz var ise İletişim bağlantısından bize ulaşın. 
Cebelleşmezsen Öğrenemezsin. 
Cevapla
#3
ozanakkaya hocam, çok teşekkür ederim, sıralama tam istediğim gibi oldu. where koşuluna and ile eklemeyi denemiştim ama demek yazım yanlışı yaptığım yerler olmuş.
Acaba hocam, aynı sorguyu güncelleme sorgusuna dönüştürerek "oto" alanını "sirano" alanındaki değer ile nasıl güncelleriz?
aşağıdaki şekilde bir güncelleştirme sorgusu denedim;

SQL Code
UPDATE adnan AS GTablo SET GTablo.oto = (select count([oto]) from adnan where [oto]<=GTablo.[oto] and [tarih]<=GTablo.[tarih]);

fakat çalıştır dediğimde "İşlem, güncelleştirilebilir sorgu kullanmalıdır" diye mesaj verdi.

Cevapla
#4
Sıra Numarası oluşturduğunuz Sorgu1 isimli sorgunun Sql kaynağı

SQL Code
SELECT GTablo.tarih, GTablo.adsoyad, GTablo.oto, (select count([oto]) from Tablo1 where [oto]<=GTablo.[oto] and [tarih]<=GTablo.[tarih]) AS sirano
FROM Tablo1 AS GTablo;



tbl_gecici isimli tablo oluşturan Sorgu2 isimli sorgunun Sql kaynağı

SQL Code
SELECT Sorgu1.tarih, Sorgu1.adsoyad, Sorgu1.oto, Sorgu1.sirano INTO tbl_gecici
FROM Sorgu1;


Tablo1'deki oto alanını güncelleyen Sorgu3'ün Sql kaynağı

SQL Code
UPDATE Tablo1 INNER JOIN tbl_gecici ON (Tablo1.tarih = tbl_gecici.tarih) AND (Tablo1.oto = tbl_gecici.oto) SET Tablo1.oto = [tbl_gecici].[sirano];



Önce sorgu2 çalıştırılıp geçici tablo oluşturulur, Sorgu3 çalıştırılıp Tablo1'deki oto alanı güncelleştirilir.

"Boş Örnek Eklerim, Yapıp Verirler" demeyin, örneğinizi hazırlayın.
Komplike kod talebiniz var ise İletişim bağlantısından bize ulaşın. 
Cebelleşmezsen Öğrenemezsin. 
Cevapla
#5
Çok teşekkür ederim hocam,
Cevapla
#6
Hocam kendi projem üzerinden Sorgu1'i uyguladığımda şöyle bir problem ile karşılaştım.
öncelikle benim SIPARIS_LISTE tablomdaki alanlarım, LISTE_URETIM_SIRA ---> tür: Sayı, LISTE_KIMLIK --->tür:Otomatik Sayı (ayrıca birincil anahtar).

SQL Code
SELECT SIRALAMA.LISTE_URETIM_SIRA, SIRALAMA.LISTE_KIMLIK, (select count([LISTE_URETIM_SIRA]) from dbo_SIPARIS_LISTE  where  [LISTE_URETIM_SIRA]<=SIRALAMA.[LISTE_URETIM_SIRA] and [LISTE_KIMLIK]<=SIRALAMA.[LISTE_KIMLIK] ) AS sira
FROM dbo_SIPARIS_LISTE AS SIRALAMA
WHERE (((SIRALAMA.LISTE_URETIM_SIRA)<1000))
ORDER BY SIRALAMA.LISTE_URETIM_SIRA, SIRALAMA.LISTE_KIMLIK;

Burada yapmak istediğim sıralama yaparken öncelikle LISTE_URETIM_SIRA alanına baksın, bu alanda değeri eşit olanlar var ise LISTE_KIMLIK alanına bakıp küçükten büyüğe sıralasın. Fakat bu sefer sıralamayı aşağıdaki şekilde yapıyor:
LISTE_URETIM_SIRA      LISTE_KIMLIK       sira
965                                        10377                 1
996                                        10366                 1
997                                        10127                 1
997                                        10782                 4

Acaba nerede neyi gözden kaçırıyor olabilirim?

Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da