AccessTr.neT
Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme (/konu-birden-fazla-kritere-gore-sorguda-sira-numarasi-ekleme.html)

Sayfalar: 1 2


Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - hbal09 - 28/04/2020

Merhabalar,
Ustalarımız,   https://accesstr.net/konu-sorguya-sira-no-verdirmek.html?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-no-verdirmek.html?pid=17632#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.


RE: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - ozanakkaya - 28/04/2020

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.


RE: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - hbal09 - 28/04/2020

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;
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.


RE: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - ozanakkaya - 28/04/2020

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

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ğı

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ğı

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.


RE: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - hbal09 - 28/04/2020

Çok teşekkür ederim hocam,


RE: Birden Fazla Kritere Göre Sorguda Sıra Numarası Ekleme - hbal09 - 28/04/2020

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).
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?