Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Arkadaşlar şöyle bir yapıya ihtiyacım var ama nasıl bir SQL kullanarak bunu yapabilirim.
Şimdi bir tablom var.Bir muayene tablosu.

adisoyadi muayenetarihi

Ahmet Akkaş 01.01.2003
Ahmet Akkaş 01.05.2004
Ahmet Akkaş 01.03.2005
Ahmet Akkaş 01.07.2006
Ahmet Akkaş 01.08.2007
Ahmet Akkaş 01.03.2008
Ahmet Akkaş 01.06.2009
Ahmet Akkaş 01.11.2010
Bayram Kılıç 01.01.2003
Bayram Kılıç 01.06.2004
Bayram Kılıç 01.04.2005
Bayram Kılıç 01.01.2006
Bayram Kılıç 01.09.2007
Bayram Kılıç 01.12.2008
Bayram Kılıç 01.11.2009
Bayram Kılıç 01.11.2010




Bu tabloyu aşağıdaki gibi bir Excel tablosu haline dönüştürmeliyim.Excele aktarma konusunda sıkıntı yok ta bu exceldeki gibi tablo olarak DBGridde nasıl gösterebiliirm.Onun SQL tarafında takıldım.

Şimdi bu muayene tarihlerini ay olarak ama yılları tablo alanı gibi görüntüleyerek yani X hasta hangi yılda hangi ayda muayene oldu gibi listelemek istiyorum.Sanırım aşağıdaki resim daha açıklayıcı olacaktır.Teşekkürler.

Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen conari »

Yıl olayını her seferinde senin vermen gerekecek. Onun için Parametre kullanırsınız.
Kayıtların her yıl için tek olması gerekir. Fazla olursa TOP1 Desc v.s. kullanmak gerekecektir.
Örnek şöyle bir yapı olabilir.

Kod: Tümünü seç

Select
T1.ADISOYADI,
(SELECT Datename(mm,Tarih) FROM TABLO T2 WHERE year(tarih)=2003 and T1.ADISOYADI=T2.ADISOYADI) as 2003,
(SELECT Datename(mm,Tarih) FROM TABLO T2 WHERE year(tarih)=2004 and T1.ADISOYADI=T2.ADISOYADI) as 2004,
(SELECT Datename(mm,Tarih) FROM TABLO T2 WHERE year(tarih)=2005 and T1.ADISOYADI=T2.ADISOYADI) as 2005
FROM TABLO T1
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Hocam vt firebird ve year satırında şu şekilde hata verdi ama

Kod: Tümünü seç

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 69.
year.
SQL Kodumda şu şekle çevirdim.

Kod: Tümünü seç

Select
T1.HASTAADISOYADI,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM TABLO T2 WHERE year(muayeneistem.muayenetarihi)=2003 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2003,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM TABLO T2 WHERE year(muayeneistem.muayenetarihi)=2004 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2004,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM TABLO T2 WHERE year(muayeneistem.muayenetarihi)=2005 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2005
FROM muayeneistem T1
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen conari »

FROM TABLO T2
Yazan yerleride muayeneistem olarak değiştirmelisiniz.
Firebirdde Year karşılığı nedir bilemiyeceğim şöyle bir şey olabilir.

Kod: Tümünü seç

WHERE EXTRACT(year FROM muayeneistem.muayenetarihi)=2003
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Rew33
Üye
Mesajlar: 70
Kayıt: 10 Tem 2009 02:28

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen Rew33 »

istediğiniz sql'de cursor ile yapılabilir kişinin min(Tarih) ile max(Tarih) arasında bir döngü kurup yapabilirsiniz bide kişi aynı ay içerisinde birden fazala gelirse neyapmak istiyorsunuz
Kimseye hiçbir şey öğretemem, sadece onların düşünmelerini sağlayabilirim.
SOKRATES
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Arkadaşlar ilginize çok teşekkürler.

Kod: Tümünü seç

Select
T1.HASTAADISOYADI,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract (year FROM muayeneistem.muayenetarihi)=2003 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2003,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE  extract (year FROM muayeneistem.muayenetarihi)=2004 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2004,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract (year FROM muayeneistem.muayenetarihi)=2005 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as 2005
FROM muayeneistem T1
Kodu bu şekilde düzenleidm hata mesajı şu şekilde çıkıyor..

Kod: Tümünü seç

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 172.
2003.
Eğer aynı ay içerisinde birden fazla geldiyse de bir kez sayması yeterli.Ama sorun o değilde aynı yıl içerisinde birden fazla ay da geldiyse onu nasıl yaparız daha oraya gelemedik.Ama aynı yıl içerisinde birden fazla ayda geldiyse de o kişiye bir satır daha açıp o ayı da altta belirtse güzel olur ama dediğim gibi daha oraya gelemedik.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Kod: Tümünü seç

Select
T1.HASTAADISOYADI,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2003 and T1.HASTAADISOYADI=T2.HASTAADISOYADI),
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE  extract(year from t2.muayenetarihi)=2004 and T1.HASTAADISOYADI=T2.HASTAADISOYADI),
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2005 and T1.HASTAADISOYADI=T2.HASTAADISOYADI)
FROM muayeneistem T1

En son bu haldeyim ama Sanırım DateNAme fonksiyonu fb de yok
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Kod: Tümünü seç

Select
T1.HASTAADISOYADI,
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2003 and T1.HASTAADISOYADI=T2.HASTAADISOYADI),
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE  extract(year from t2.muayenetarihi)=2004 and T1.HASTAADISOYADI=T2.HASTAADISOYADI),
(SELECT Datename(mm,muayeneistem.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2005 and T1.HASTAADISOYADI=T2.HASTAADISOYADI)
FROM muayeneistem T1

En son bu haldeyim ama Sanırım DateNAme fonksiyonu fb de yok çünkü hata mesajı

Kod: Tümünü seç

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
Datename.
Zaten ibexpertte tanımıyor
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Kod: Tümünü seç

 Select
T1.HASTAADISOYADI As HASTA_ADI_SOYADI,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2003 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2003,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE  extract(year from t2.muayenetarihi)=2004 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2004,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2005 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2005,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2006 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2006,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE  extract(year from t2.muayenetarihi)=2007 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2007,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2008 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2008,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2009 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2009,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE  extract(year from t2.muayenetarihi)=2010 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2010,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2011 and T1.HASTAADISOYADI=T2.HASTAADISOYADI) as YIL_2011
FROM muayeneistem T1
Arkadaşlar en son bu noktaya geldim.Hatasız bir şekilde çalışıyor ancak tek satır döndürüyor.Yani sadece tablodaki ilk hastayı döndürüyor
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

Arkadaşlar yardım edecek yokmu?Group by eklersem de bu seferde enteresan bir şekilde sadece ilk 4 satır döndürüyor.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen m_ekici »

HASTA isminde bir VİEW oluştur

Kod: Tümünü seç

select adisoyadi from muayene group by adisoyadi
ve aşağıdaki kodu bu view ile çalıştırın

Kod: Tümünü seç

Select
T1.adisoyadi As HASTA_ADI_SOYADI,
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2003 and T1.adisoyadi=T2.HASTAADISOYADI) as YIL_2003,
..........
(SELECT extract(month from t2.muayenetarihi) FROM muayeneistem T2 WHERE extract(year from t2.muayenetarihi)=2011 and T1.adisoyadi=T2.HASTAADISOYADI) as YIL_2011
FROM HASTA T1
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen NewMember »

@m_ekici arkadaşım çok teşekkür ederim...Çok güzelbir şekilde çalışıyor.Bir sorum daha olcak affınıza sığınarak.Aylar numara olarak çıkıyor.Yani Nisan 4 ocak 1 gibi.Bunları Ocak Nisan gibi nasıl yazdırabilirim?
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Muayene Tarihlerini Yıllara Göre Listelemek(SQL)

Mesaj gönderen conari »

belki ay ismini döndüren fonksiyon vardır. Yoksa FB için önerim aylar diye bir tablo oluştur.
ID -- ad
1-- Ocak
2-- Şubat
...
12--Aralık

Birde FB de fonksiyon oluştur. ve fonksiyona ID yi gönder. Oda sana ay ismini versin.
MSSQL de.

Kod: Tümünü seç

create function aysoyle(@ID: integer)
returns VARCHAR(10) as
begin
declare @AYADI VARCHAR(10)
SET AYADI:= (select ad from Aylar where ID=@ID)
RETURN(@AYADI)
end
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla