Tüm Sınıfa Ait Tüm Notların Listesi ?
Tüm Sınıfa Ait Tüm Notların Listesi ?
Merhaba arkadaşlar
Ms-SQL 2005 de
Öğrenci bilgileri, notların ve derslerin tutulduğu üç tablom var.
ogrtablo
ogr_no....adi........soyad
111.........ali.........kaya
222.........ahmet...uzun
.
.
.
dersler
id....dersadi
1.....Matematik
2.....Fizik
.
.
.
notlar
ogr_no....ders....Y1....Y2....Y3
111.........1........96....65....68 (Matematik)
111.........2........75....48....95 (Fizik)
222.........1........74....78....45 (Matematik)
.
.
.
Benim istediğim sorgu sonucu şu çıktıyı almak:
ogr_no...adi...M.Y1......M.Y2......M.Y3......F.Y1.....F.Y2...F.Y3...
111........ali....96.........65.........68.........75.........48......95....
yani tüm dersleri alt alta değilde her öğrenciye yalnız bir satır ayırarak tüm dersleri kolon hâlinde yanına dizmek istiyorum.
Böyle bir çıktıyı nasıl alabilirim?
Ms-SQL 2005 de
Öğrenci bilgileri, notların ve derslerin tutulduğu üç tablom var.
ogrtablo
ogr_no....adi........soyad
111.........ali.........kaya
222.........ahmet...uzun
.
.
.
dersler
id....dersadi
1.....Matematik
2.....Fizik
.
.
.
notlar
ogr_no....ders....Y1....Y2....Y3
111.........1........96....65....68 (Matematik)
111.........2........75....48....95 (Fizik)
222.........1........74....78....45 (Matematik)
.
.
.
Benim istediğim sorgu sonucu şu çıktıyı almak:
ogr_no...adi...M.Y1......M.Y2......M.Y3......F.Y1.....F.Y2...F.Y3...
111........ali....96.........65.........68.........75.........48......95....
yani tüm dersleri alt alta değilde her öğrenciye yalnız bir satır ayırarak tüm dersleri kolon hâlinde yanına dizmek istiyorum.
Böyle bir çıktıyı nasıl alabilirim?
Keser döner, sap döner. Gün gelir devran döner...
kardeş veritabanı olarak ne kullandığını yazmamışsın ama ms sql de bu iş sql server 2005 öncesi
select
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as BirinciAy,
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as ikinciAy
from Fatura
şeklinde elde edebilirsin
2005 de ise pivot table diye bir yapı geldi onunla da bu işi yapabilirsin..
iyi çalışmalar..
select
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as BirinciAy,
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as ikinciAy
from Fatura
şeklinde elde edebilirsin
2005 de ise pivot table diye bir yapı geldi onunla da bu işi yapabilirsin..
iyi çalışmalar..
derviş
Arkadaş 2005 diye yazmışunalaygun yazdı:kardeş veritabanı olarak ne kullandığını yazmamışsın ama ms sql de bu iş sql server 2005 öncesi
select
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as BirinciAy,
sum(case when datepart(dd,Tarih)=1 then Toplamtutar else 0 end ) as ikinciAy
from Fatura
şeklinde elde edebilirsin
2005 de ise pivot table diye bir yapı geldi onunla da bu işi yapabilirsin..
iyi çalışmalar..

Ben 2005 içindede Case ile yapıyorum.
@unalaygun Pivot hakkında bilgin var ise paylaşabilirmisin?
Bir kelimenin anlamını öğretsen bile yeter..



Veritabanı olarak Ms sql server 2005 kullanıyorum.
1) Başka yerlerde de "pivot" kullanımını önerdiler. Fakat kod yazımı hakkında yardımcı olmadılar. Kendim yapmaya çalıştım fakat pivot örneklerine baktım sanırım sadece AVG, COUNT,MAX gibi fonksiyonlarla kullanılabiliyor. Benim istediğim formatta ise bu şekilde nasıl yapılır bilmiyorum. Mümkünse benim istediğim format şeklinde küçük bir kod örneği verebilir misiniz?
2) Case ile de denedim. Yani denemeye çalıştım ama pek bişey yapamadım.
Mümkünse kod konusunda yardımcı olurmusunuz?
Şimdiden teşekkürler.
Kolay Gelsin...
1) Başka yerlerde de "pivot" kullanımını önerdiler. Fakat kod yazımı hakkında yardımcı olmadılar. Kendim yapmaya çalıştım fakat pivot örneklerine baktım sanırım sadece AVG, COUNT,MAX gibi fonksiyonlarla kullanılabiliyor. Benim istediğim formatta ise bu şekilde nasıl yapılır bilmiyorum. Mümkünse benim istediğim format şeklinde küçük bir kod örneği verebilir misiniz?
2) Case ile de denedim. Yani denemeye çalıştım ama pek bişey yapamadım.


Şimdiden teşekkürler.
Kolay Gelsin...
Keser döner, sap döner. Gün gelir devran döner...
Kusura bakma kardeş
kardeş kusura bakma ancak atabildim
bunu da notpad de yazdım çalışma durumunda sorun çıkarsa dön pivot table da ilk fırsatta atayım.
Ama bende case when kullanıyorum.
Çünkü alışkanlık diyelim ve zaten aslında onunda farklı bir şey yapyığı yok
onu da yazacağım görüşürüz iyi çalışmalar arkadaşlar..
select
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.Adi) as Adi,
,max(ogrtablo.soyadi) as soyadi,
case dersler.id
when 1 then 'Matematik'
when 2 then 'Fizik'
when 2 then 'Türkçe'
else '' end as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
inner join ogrtablo.ogr_no=notlar.ogr_no
where
ogrtablo.ogr_no=1
group by dersler.id,ogrtablo.ogr_no
bunu da notpad de yazdım çalışma durumunda sorun çıkarsa dön pivot table da ilk fırsatta atayım.
Ama bende case when kullanıyorum.
Çünkü alışkanlık diyelim ve zaten aslında onunda farklı bir şey yapyığı yok
onu da yazacağım görüşürüz iyi çalışmalar arkadaşlar..
select
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.Adi) as Adi,
,max(ogrtablo.soyadi) as soyadi,
case dersler.id
when 1 then 'Matematik'
when 2 then 'Fizik'
when 2 then 'Türkçe'
else '' end as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
inner join ogrtablo.ogr_no=notlar.ogr_no
where
ogrtablo.ogr_no=1
group by dersler.id,ogrtablo.ogr_no
derviş
Merhabalar...
SELECT
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.adi) as Adi,
max(ogrtablo.soyadi) as Soyadi,
case dersler.DerslerID
when 1 then 'Matematik'
when 2 then 'Fizik'
when 3 then 'Türkçe'
else ''
end
as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
INNER JOIN
dbo.notlar ON ogrtablo.Ogr_no = notlar.Ogr_no
where
ogrtablo.ogr_no = 1
group by dersler.DerslerID, ogrtablo.ogr_no
şeklinde denedim.
şu mesajı verdi.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.

SELECT
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.adi) as Adi,
max(ogrtablo.soyadi) as Soyadi,
case dersler.DerslerID
when 1 then 'Matematik'
when 2 then 'Fizik'
when 3 then 'Türkçe'
else ''
end
as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
INNER JOIN
dbo.notlar ON ogrtablo.Ogr_no = notlar.Ogr_no
where
ogrtablo.ogr_no = 1
group by dersler.DerslerID, ogrtablo.ogr_no
şeklinde denedim.
şu mesajı verdi.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.

Keser döner, sap döner. Gün gelir devran döner...
SELECT
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.adi) as Adi,
max(ogrtablo.soyadi) as Soyadi,
case dersler.DerslerID
when 1 then 'Matematik'
when 2 then 'Fizik'
when 3 then 'Türkçe'
else ''
end
as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
INNER JOIN
dbo.notlar ON ogrtablo.Ogr_no = notlar.Ogr_no
where
ogrtablo.ogr_no = 1
group by notlar.Ders, notlar.ogr_no
bak bakalım
ogrtablo.ogr_no as OgrenciNo,
max(ogrtablo.adi) as Adi,
max(ogrtablo.soyadi) as Soyadi,
case dersler.DerslerID
when 1 then 'Matematik'
when 2 then 'Fizik'
when 3 then 'Türkçe'
else ''
end
as DersAdi,
notlar.Y1,
notlar.Y2,
notlar.Y3
from ogrtablo
INNER JOIN
dbo.notlar ON ogrtablo.Ogr_no = notlar.Ogr_no
where
ogrtablo.ogr_no = 1
group by notlar.Ders, notlar.ogr_no
bak bakalım
derviş
Bu hatayı verdi.
Msg 8120, Level 16, State 1, Line 1
Column 'ogrtablo.Ogr_No' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Not: Kusura bakmayın cevapları geç gönderiyorum. Çünkü evimde internet yok. Ancak günde bir defa internete girebildiğimden arada ikişer gün oluşuyor.
Msg 8120, Level 16, State 1, Line 1
Column 'ogrtablo.Ogr_No' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dersler.DerslerID" could not be bound.
Not: Kusura bakmayın cevapları geç gönderiyorum. Çünkü evimde internet yok. Ancak günde bir defa internete girebildiğimden arada ikişer gün oluşuyor.
En son ofaruk_k tarafından 09 Ağu 2007 06:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Keser döner, sap döner. Gün gelir devran döner...
select
max(ogrtablo.Ogr_No) [öğrenci Numarasi],
max(Adi) as Adi,
max(Soyadi)as Soyadi,
sum(case when DerslerId=1 then Y1 else 0 end) MatematikY1,
sum(case when DerslerId=1 then Y2 else 0 end) MatematikY2,
sum(case when DerslerId=1 then Y3 else 0 end) MatematikY3,
sum(case when DerslerId=2 then Y1 else 0 end) FizikY1,
sum(case when DerslerId=2 then Y2 else 0 end) FizikY2,
sum(case when DerslerId=2 then Y3 else 0 end) FizikY3,
sum(case when DerslerId=3 then Y1 else 0 end) KimyaY1,
sum(case when DerslerId=3 then Y2 else 0 end) KimyaY2,
sum(case when DerslerId=3 then Y3 else 0 end) KimyaY3
from ogrtablo
inner join notlar on notlar.Ogr_No=ogrtablo.Ogr_No
--where
--ogrtablo.Ogr_No in(1,2,3)
group by ogrtablo.Ogr_No
Dersler tablosunu kullanmadan yaptık çünkü denermalizasyon yapmışsın aslında güzelde olmuş böylece bir joinden kurtulduk ama tabi 1,2,3 gibi rakamların ne anlama geldiğini anlamak için bu tablo gerekli aslında c# ta bu bilgileri enum denen sayısal değerlere karşılık gelen senin görmek istediğin rakamlara tutyorlar böylece veritabanında tutmaya yada command yazmaya gerek kalmıyor.
İşini görürü inşallah kolay gelsin..
max(ogrtablo.Ogr_No) [öğrenci Numarasi],
max(Adi) as Adi,
max(Soyadi)as Soyadi,
sum(case when DerslerId=1 then Y1 else 0 end) MatematikY1,
sum(case when DerslerId=1 then Y2 else 0 end) MatematikY2,
sum(case when DerslerId=1 then Y3 else 0 end) MatematikY3,
sum(case when DerslerId=2 then Y1 else 0 end) FizikY1,
sum(case when DerslerId=2 then Y2 else 0 end) FizikY2,
sum(case when DerslerId=2 then Y3 else 0 end) FizikY3,
sum(case when DerslerId=3 then Y1 else 0 end) KimyaY1,
sum(case when DerslerId=3 then Y2 else 0 end) KimyaY2,
sum(case when DerslerId=3 then Y3 else 0 end) KimyaY3
from ogrtablo
inner join notlar on notlar.Ogr_No=ogrtablo.Ogr_No
--where
--ogrtablo.Ogr_No in(1,2,3)
group by ogrtablo.Ogr_No
Dersler tablosunu kullanmadan yaptık çünkü denermalizasyon yapmışsın aslında güzelde olmuş böylece bir joinden kurtulduk ama tabi 1,2,3 gibi rakamların ne anlama geldiğini anlamak için bu tablo gerekli aslında c# ta bu bilgileri enum denen sayısal değerlere karşılık gelen senin görmek istediğin rakamlara tutyorlar böylece veritabanında tutmaya yada command yazmaya gerek kalmıyor.
İşini görürü inşallah kolay gelsin..
derviş
çok çok teşekkürler. İstediğim şekilde oldu.
Peki, dersler tablosundaki dersleri otomatik olarak kendi oluşturulabilir mi? Yani teker teker case ifadesi kullanılmayabilir mi? Ayrıca pivot ile kullanımda da bu şekilde teker teker belirtmemiz gerekir mi?
Tekrar çok Teşekürler.
Kolay Gelsin...
Peki, dersler tablosundaki dersleri otomatik olarak kendi oluşturulabilir mi? Yani teker teker case ifadesi kullanılmayabilir mi? Ayrıca pivot ile kullanımda da bu şekilde teker teker belirtmemiz gerekir mi?
Tekrar çok Teşekürler.
Kolay Gelsin...
Keser döner, sap döner. Gün gelir devran döner...
Rica ederim kardeşim hepimiz burda bilmediğimiz şeyleri birbirimizden öğreniyoruz.
pivot ta kullansan bu şekilde belirtmek zorundasın malesef case de kendin yazmalısın yapman gereken zaten dersler o kadar sık değişen bir şey olmasa gerek diye düşünüyorum ama söyle yapabilirsin bu sql delphi ya da ne ile programlama yapıyorsan orada string bir şekilde hazırlarsan
burada tablodan okutursun case li bir halde yani diyeceğim o durki sqlin dinamik bir hale sokmalısın onunn haricinde sql de malesef böyle bi,r yöntem yok ya da en azından ben bilmiyorum.
tekrar kolay gelsin.
pivot ta kullansan bu şekilde belirtmek zorundasın malesef case de kendin yazmalısın yapman gereken zaten dersler o kadar sık değişen bir şey olmasa gerek diye düşünüyorum ama söyle yapabilirsin bu sql delphi ya da ne ile programlama yapıyorsan orada string bir şekilde hazırlarsan
burada tablodan okutursun case li bir halde yani diyeceğim o durki sqlin dinamik bir hale sokmalısın onunn haricinde sql de malesef böyle bi,r yöntem yok ya da en azından ben bilmiyorum.
tekrar kolay gelsin.
derviş
Re: Tüm Sınıfa Ait Tüm Notların Listesi ?
iki alana gore pivot yapabilir miyiz.
bende vardiya ve her vardiyada elemanin calistigi toplam saatini aylara gore cikarmak istiyorum.
aylara gore yaptim ama vardiyayi da pivot yapmazsam karisik gozukuyor.
mesela
gibi her sicil no icin gormek istiyorum.
bende vardiya ve her vardiyada elemanin calistigi toplam saatini aylara gore cikarmak istiyorum.
aylara gore yaptim ama vardiyayi da pivot yapmazsam karisik gozukuyor.
Kod: Tümünü seç
SELECT SicilNO, VARDIYA, SUM(SURE) AS [AY],
SUM(CASE WHEN MONTH(TARIH)=1 THEN SURE ELSE 0 END) AS AY1,
SUM(CASE WHEN MONTH(TARIH)=2 THEN SURE ELSE 0 END) AS AY2,
SUM(CASE WHEN MONTH(TARIH)=3 THEN SURE ELSE 0 END) AS AY3,
SUM(CASE WHEN MONTH(TARIH)=4 THEN SURE ELSE 0 END) AS AY4,
SUM(CASE WHEN MONTH(TARIH)=5 THEN SURE ELSE 0 END) AS AY5,
SUM(CASE WHEN MONTH(TARIH)=6 THEN SURE ELSE 0 END) AS AY6,
SUM(CASE WHEN MONTH(TARIH)=7 THEN SURE ELSE 0 END) AS AY7,
SUM(CASE WHEN MONTH(TARIH)=8 THEN SURE ELSE 0 END) AS AY8,
SUM(CASE WHEN MONTH(TARIH)=9 THEN SURE ELSE 0 END) AS AY9,
SUM(CASE WHEN MONTH(TARIH)=10 THEN SURE ELSE 0 END) AS AY10,
SUM(CASE WHEN MONTH(TARIH)=11 THEN SURE ELSE 0 END) AS AY11,
SUM(CASE WHEN MONTH(TARIH)=12 THEN SURE ELSE 0 END) AS AY12
FROM tblPuantaj
GROUP BY SicilNO, VARDIYA, MONTH(TARIH)
ORDER BY MONTH(TARIH)
Kod: Tümünü seç
sicil_no ay1 ay2 ay3 ... ay12
================================
v1 14 12 16
v2 15 13 14
v3 16 14 18
gibi her sicil no icin gormek istiyorum.
Re: Tüm Sınıfa Ait Tüm Notların Listesi ?
o zaman,örnek 1. ay için;
olarak 3*12 = 36 field yapman lazım.
Kod: Tümünü seç
SUM(CASE WHEN MONTH(TARIH)=1 and VARDIYA='v1' THEN SURE ELSE 0 END) AS AY1_VD1,
SUM(CASE WHEN MONTH(TARIH)=1 and VARDIYA='v2' THEN SURE ELSE 0 END) AS AY1_VD2,
SUM(CASE WHEN MONTH(TARIH)=1 and VARDIYA='v3' THEN SURE ELSE 0 END) AS AY1_VD3,.............
Bir kelimenin anlamını öğretsen bile yeter..


