20 yıllık bir firmanın çeşitli bölümlerinde çalışan personelin farklı kronik hastalıkları var. Seçtiğimiz bölümde Belirlediğimiz zaman aralığında hangi hastalıktan kaç kişi çalışmış listelemek istiyoruz
mesela bulacağımız sonuçlardan birisi şöyle olacak
Firmanın A bölümünde 07.11.2011 ile 08.02.2016 tarihleri arasında 6 adet diabet hastası çalışmış. gibi
binlerce çalışan farklı tarihlerde giriş çıkış yapmış farklı farklı hastalıkları var.
gidiş yolumuz nasıl olmalı ki verilen kriterlere uyan çalışanlardan
kaç tanesinde hangi hastalıklardan ne kadar sayıda var bulabilelim
problemi arkadaşaların gayretiyle çözülmüş oldu
tüm emeği geçen arkadaşlara çok teşekkürler
örnek çözülmüş son hali
bence tablo yapınızı değiştirip hastalık kısmı için ayrı tablo oluşturmalısınız yada her defasında geçi bir tablo oluşturup orada hesaplama yapmalısınız
personel tablosu, hastalık adı tablosu ve personel hastalık tablosu oluşturup ilişkilendirmeliisiniz
(27/03/2020, 15:21)berduş yazdı: bence tablo yapınızı değiştirip hastalık kısmı için ayrı tablo oluşturmalısınız yada her defasında geçi bir tablo oluşturup orada hesaplama yapmalısınız
personel tablosu, hastalık adı tablosu ve personel hastalık tablosu oluşturup ilişkilendirmeliisiniz
bende düşündüm ama maalesef elimde hazır halde bu tablo var dediğim gibi yılların birikimi olarak oluşturulmuş bir tablo ve çalışan sayısı 5000 e yakın
sn. @
feraz ın yardımıyla çoğu bitmiş durumda sadece tarih filtrelemede isabetli bir
Sql yazmaya kaldı
bu gibi durumlarda sn. @
berduş berduşun dediği gibi id leri olan bir kronik hastalık tablosu olsa güzel olur tablo ilişkilendirip sadece id lerini personel tablosuna eklemek yeterli olmalı
hem eksoz gibi kelimelerin 10 farklı şekilde girilmesi önlenmiş olur hemde daha az yer kaplamış olur
ama bunun da sıkıntısı kronik tablosuna bir şey olsa tüm kronik hastalıklar bilgisi personel tablosunda çöpe dönüşecek
o yüzden hali hazırda bilgileri girilmiş bir tabloda olunca bunu kullanmak zorundayım
her çalışanın ilk ve son tarihe göre 6 ihtimalden birine dahil
1.ihtimal :başlama ve bitiş tarihi ilk ve son tarihden önce vb şekilde
diğerleride şekilden daha iyi anlaşılır
yani bir gün bile olsa ilk ve son tarih arasında çalışmış olanların sayısını bulmamız gerekir değil mi
şimdi gelelim Sql cümlemizi yazmaya
strSQL = "SELECT Tablo1.id, Tablo1.isimler,Tablo1.kronik, Tablo1.firma, Tablo1.bastarih, Tablo1.bittarih FROM Tablo1" & _
" WHERE Tablo1.firma='" & [Metin13] & "'" & _
" AND not isnull(kronik)" & _
" AND Tablo1.bastarih >= #" & Format([ilktarih], "dd-mm-yyyy") & "#" & _
" AND Tablo1.bastarih <= #" & Format([sontarih], "dd-mm-yyyy") & "#" & _
" AND Tablo1.bittarih >= #" & Format([ilktarih], "dd-mm-yyyy") & "#" & _
" AND Tablo1.bittarih <= #" & Format([sontarih], "dd-mm-yyyy") & "#;"
bu şekilde yazarsak 2,3,4,5. ihtimalleri kapsar mı
eğer 1. ve 6 ihtimalleri içermeyenleri bulursak sanırım sorun çözülecek yani
1. ihtimal için (bastarih < ilktarih) And (bittarih < ilktarih)
6. ihtimal için (bastarih > sontarih) And (bittarih > sontarih)
bu iki ihtimali içermeyen Sql cümlesi nasıl olmalı
şöyle desek nasıl olur
bittarih >= bastarih olmak şartıyla
(bittarih >= ilktarih) And (bastarih <= sontarih)
bunu Sql cümlesi olarak ifade edersek
strSQL = "SELECT Tablo1.id, Tablo1.isimler,Tablo1.kronik, Tablo1.firma, Tablo1.bastarih, Tablo1.bittarih FROM Tablo1" & _
" WHERE Tablo1.firma='" & [Metin13] & "'" & _
" AND not isnull(kronik)" & _
" AND cDate(Tablo1.bastarih) <= cdate(Tablo1.bittarih)" & _
" AND Tablo1.bastarih <= #" & Format([sontarih], "dd-mm-yyyy") & "#" & _
" AND Tablo1.bittarih >= #" & Format([ilktarih], "dd-mm-yyyy") & "#;"
Filtre ile aramada isimlerdemi listelenecek bunu merak ediyorum.
Listede nasıl sonuç çıkacağını tabloda gösterseniz bence konuyu uzatmadan çözülür.
isimler listelenmeyecek kişi sayısı bulunacak
daibetli 5 kişi
Hipertansiyonlu 10 kişi vs
Daha önce aynı soruyu
Tablodaki "," İle Ayrılan Verileri Saymak bağlantısında sordunuz, size yardımcı olmak isteyenler çözüm bulmak için bir ton cevap yazdı. Şimdi bu konuyu farklı örnek ekleyip yeniden niye açıyorsunuz?
İki tarih arası için kullanmanız gereken kod aşağıdadır.
strSQL = "SELECT id, isimler,kronik, firma, bastarih, bittarih FROM Tablo1" & _
" WHERE firma='" & [Metin13] & "'" & _
" AND not isnull(kronik)" & _
" AND ((bastarih >= #" & Format([ilktarih], "dd-mm-yyyy") & "# or bastarih <= #" & Format([sontarih], "dd-mm-yyyy") & "#)" & _
" AND (bittarih >= #" & Format([ilktarih], "dd-mm-yyyy") & "# or bittarih <= #" & Format([sontarih], "dd-mm-yyyy") & "#));"