Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Tarihlere gore gruplama
#1
Merhabalar,
stok adi     tarih              miktari
 a              01.10.2017       5
 a              02.10.2017       2 
 a              01.11.2017       4
 a              01.12.2017       3
 a              01.01.2018       4
 a              01.10.2018       6
 b              01.01.2018      10  

Seklinde bir tablom var. Bu tablodan asagidaki gibi bir rapor olusturmak istiyorum. 

stok adi        ekim-2017  kasim-2017  aralik-2017 ocak-2018 Ekim-2018
a                      7             4                  3              4                6
b                      0             0                  0              10              0 

Boyle bir sorguyu nasil oluşturabilirim acaba?
Teşekkürler.
Cevapla
#2
Merhaba,

Firebird 2.5 veri tabanında pivot özelliği yok diye biliyorum.

Onun yerine,

SELECT ad, 
sum(case when tarih between '01.01.2017' and '31.01.2017' then miktar else 0 end) as Ocak2017,
sum(case when tarih between '01.02.2017' and '28.02.2017' then miktar else 0 end) as Subat2017,
sum(case when tarih between '01.03.2017' and '31.01.2017' then miktar else 0 end) as Mart2017,
...
from tablo
group by ad

şeklinde kullanabilirsiniz...
Cevapla
#3
Selamlar

 declare @Yil Int = 0
Select 
    Case When DatePart(Month,FiyatTarihi) = 1 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ocak',
    Case When DatePart(Month,FiyatTarihi) = 2 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Şubat',
    Case When DatePart(Month,FiyatTarihi) = 3 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Mart',
    Case When DatePart(Month,FiyatTarihi) = 4 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Nisan',
    Case When DatePart(Month,FiyatTarihi) = 5 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Mayıs',
    Case When DatePart(Month,FiyatTarihi) = 6 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Haziran',
    Case When DatePart(Month,FiyatTarihi) = 7 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Temmuz',
    Case When DatePart(Month,FiyatTarihi) = 8 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ağustos',
    Case When DatePart(Month,FiyatTarihi) = 9 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Eylül',
    Case When DatePart(Month,FiyatTarihi) = 10 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ekim',
    Case When DatePart(Month,FiyatTarihi) = 11 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Kasım',
    Case When DatePart(Month,FiyatTarihi) = 12 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Aralık'
  From Urun 
 Where DatePart(Year,FiyatTarihi) = 2017
 Group By 
    DatePart(Year,FiyatTarihi), DatePart(Month,FiyatTarihi)
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#4
(20-12-2017, Saat: 15:51)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Firebird 2.5 veri tabanında pivot özelliği yok diye biliyorum.

Onun yerine,

SELECT ad, 
sum(case when tarih between '01.01.2017' and '31.01.2017' then miktar else 0 end) as Ocak2017,
sum(case when tarih between '01.02.2017' and '28.02.2017' then miktar else 0 end) as Subat2017,
sum(case when tarih between '01.03.2017' and '31.01.2017' then miktar else 0 end) as Mart2017,
...
from tablo
group by ad

şeklinde kullanabilirsiniz...

Teşekkür ederim mad85 . Bende bu yontemi dusunmustum ama tarih araligi sabit olmadigi icin bu sekilde bir sorgu ugrastiracaktir. (her ayin bitis tarihini alip sorguyu ona gore olusturmak gibi.) Ama baska yontem bulamazsam bunu kullanacagim.

(20-12-2017, Saat: 16:11)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelamlar

 declare @Yil Int = 0
Select 
    Case When DatePart(Month,FiyatTarihi) = 1 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ocak',
    Case When DatePart(Month,FiyatTarihi) = 2 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Şubat',
    Case When DatePart(Month,FiyatTarihi) = 3 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Mart',
    Case When DatePart(Month,FiyatTarihi) = 4 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Nisan',
    Case When DatePart(Month,FiyatTarihi) = 5 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Mayıs',
    Case When DatePart(Month,FiyatTarihi) = 6 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Haziran',
    Case When DatePart(Month,FiyatTarihi) = 7 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Temmuz',
    Case When DatePart(Month,FiyatTarihi) = 8 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ağustos',
    Case When DatePart(Month,FiyatTarihi) = 9 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Eylül',
    Case When DatePart(Month,FiyatTarihi) = 10 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Ekim',
    Case When DatePart(Month,FiyatTarihi) = 11 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Kasım',
    Case When DatePart(Month,FiyatTarihi) = 12 Then Sum(IsNull(Fiyat,0)) Else 0 End As 'Aralık'
  From Urun 
 Where DatePart(Year,FiyatTarihi) = 2017
 Group By 
    DatePart(Year,FiyatTarihi), DatePart(Month,FiyatTarihi)

Teşekkur ederim adelphiforumz . Bu sorgu anladığım kadarıyla sadece  belirtilen yılı veriyor. Sorgu sonucunda birden fazla yil olabiliyor.
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi