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.
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.
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
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
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
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..
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.
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
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ı
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
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
@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?
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