Bildirimler
Hepsini Temizle

Logo  

  RSS
Suat Hocaoğlu
(@SuatHocaoglu)
Üye

Merhaba,

Çalıştığım firmada logo üzerinde bir web raporlama uygulaması yapıyorum.Bana bir konuda FİKİR verebilecek bir arkadaş var ise sevinirim.

Durum Şöyle ki;
Logo veritabanından farzedelim ki 2013-2014-2015 senelerine ait satış verileri çekilecek.
1.2013 yılına ait toplam ciro.
2.2014 Yılına ait Q1-Q2-Q3 olarak bölünmüş 4 Aylık halinde Cirolar yani;
Q1 - Ocak, Şubat, Mart, Nisan
Q2 - Mayıs, Haziran, Temmuz, Ağustos
Q3 - Eylül, Ekim, Kasım, Aralık  
3.2015 yılına ait Ocak, Şubat, Mart, Nisan.... Aylık yaptığı cirolar olacak.

Ve bunlar tek bir tablo içerisinde listelenicek.

Bu konuda bir adet View yapıp.Diğer sp_aylik-fnc_aylik, sp_5aylık-fnc_4aylik ve sp_senelik-fnc_senelik birer adet fonksiyon veya procedure oluşturarak view içerisine çekmeyi planlıyorum.Fakat yinede bu konuda bir fikir almak istedim.

 Bu konuda tecrübe sahibi arkadaşların yardımına ihtiyacım vardır.

Cevaplarınız için şimdiden teşekkür ederim.  

Alıntı
Gönderildi : 10/01/2015 16:51
Hakan Uzuner
(@hakanuzuner)
Kıdemli Üye Yönetici

Merhaba,

Destek aldığınız logo partner firması kim ise onun yapması gereken derinlikte bir konu, forum üzerinden birisinin oturup bu şekilde tamamen size özel bir konuda cevap vermesi çok doğru olmaz, ama genel bir konudur, bir cevap yazılması sonradan okuyacak üyelerede yardımcı olur o zaman mantıklı olur.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

CevapAlıntı
Gönderildi : 10/01/2015 18:46
Suat Hocaoğlu
(@SuatHocaoglu)
Üye

Merhaba,

Arkadaşlar açmış olduğum bu konuya ilişkin bulduğum çözümü sizlerle paylaşmak isterim.Uzun bir query oldu ama istediğim sonucu Northwind database üzerinde tam da istediğim gibi aldım.Bunu sizlerle paylaşmak ve ihtiyacınız olduğunuz da size de yol gösterebilir niyeti ile paylaşmak isterim.

 SELECT EMP.EmployeeID, EMP.FirstName, cust.CustomerID, CUST.CompanyName,
(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1996-01-01 00:00:00', 20)
AND convert(DATETIME, '1996-12-31 00:00:00', 20)) AS Q1Q2Q3_1996,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) AS Q1Q2Q3_1997,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-04-30 00:00:00', 20)) AS Q1_1997,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-05-01 00:00:00', 20)
AND convert(DATETIME, '1997-08-31 00:00:00', 20)) AS Q2_1997,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-09-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) AS Q3_1997,

'30' AS HEDEF_ORANI,

((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) AS CIRO_1998_HEDEF,

(SELECT ISNULL(ISNULL(SUM(ORD.Freight),0),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-01-01 00:00:00', 20)
AND convert(DATETIME, '1998-04-30 00:00:00', 20)) + (SELECT ISNULL(ISNULL(SUM(ORD.Freight),0),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-05-01 00:00:00', 20)
AND convert(DATETIME, '1998-08-30 00:00:00', 20)) + (SELECT ISNULL(ISNULL(SUM(ORD.Freight),0),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-09-01 00:00:00', 20)
AND convert(DATETIME, '1998-12-31 00:00:00', 20)) AS CIRO_1998,

((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3 AS Q1_1998,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-01-01 00:00:00', 20)
AND convert(DATETIME, '1998-01-31 00:00:00', 20)) AS Q1_OCAK,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-02-01 00:00:00', 20)
AND convert(DATETIME, '1998-02-28 00:00:00', 20)) AS Q1_SUBAT,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-03-01 00:00:00', 20)
AND convert(DATETIME, '1998-03-31 00:00:00', 20)) AS Q1_MART,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-04-01 00:00:00', 20)
AND convert(DATETIME, '1998-04-30 00:00:00', 20)) AS Q1_NISAN,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-01-01 00:00:00', 20)
AND convert(DATETIME, '1998-04-30 00:00:00', 20)) AS Q1_1998_TOPLAM,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-01-01 00:00:00', 20)
AND convert(DATETIME, '1998-04-30 00:00:00', 20)) - (((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3) AS Q1_FARK,

((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3 AS Q2_1998,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-05-01 00:00:00', 20)
AND convert(DATETIME, '1998-05-31 00:00:00', 20)) AS Q2_MAYIS,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-06-01 00:00:00', 20)
AND convert(DATETIME, '1998-06-30 00:00:00', 20)) AS Q2_HAZIRAN,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-07-01 00:00:00', 20)
AND convert(DATETIME, '1998-07-31 00:00:00', 20)) AS Q2_TEMMUZ,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-08-01 00:00:00', 20)
AND convert(DATETIME, '1998-08-31 00:00:00', 20)) AS Q2_AGUSTOS,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-05-01 00:00:00', 20)
AND convert(DATETIME, '1998-08-31 00:00:00', 20)) AS Q2_1998_TOPLAM,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-05-01 00:00:00', 20)
AND convert(DATETIME, '1998-08-31 00:00:00', 20)) - (((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3) AS Q2_FARK,

((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3 AS Q3_1998,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-09-01 00:00:00', 20)
AND convert(DATETIME, '1998-09-30 00:00:00', 20)) AS Q3_EYLUL,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-10-01 00:00:00', 20)
AND convert(DATETIME, '1998-10-31 00:00:00', 20)) AS Q3_EKIM,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-11-01 00:00:00', 20)
AND convert(DATETIME, '1998-11-30 00:00:00', 20)) AS Q3_KASIM,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-12-01 00:00:00', 20)
AND convert(DATETIME, '1998-12-31 00:00:00', 20)) AS Q3_ARALIK,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-09-01 00:00:00', 20)
AND convert(DATETIME, '1998-12-31 00:00:00', 20)) AS Q3_1998_TOPLAM,

(SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1998-09-01 00:00:00', 20)
AND convert(DATETIME, '1998-12-31 00:00:00', 20)) - (((SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) * 30 / 100) + (SELECT ISNULL(SUM(ORD.Freight),0)
FROM dbo.Orders AS ORD
WHERE
EMP.EmployeeID = ORD.EmployeeID
AND CUST.CustomerID = ORD.CustomerID
AND ORD.ShippedDate
BETWEEN convert(DATETIME, '1997-01-01 00:00:00', 20)
AND convert(DATETIME, '1997-12-31 00:00:00', 20)) / 3) AS Q3_FARK

FROM dbo.Orders AS ORD
LEFT OUTER JOIN dbo.Customers CUST ON ORD.CustomerID = CUST.CustomerID
LEFT OUTER JOIN dbo.Employees EMP ON ORD.EmployeeID = EMP.EmployeeID
GROUP BY EMP.EmployeeID, EMP.FirstName, CUST.CompanyName, cust.CustomerID
ORDER BY EMP.FirstName

Yukarıda ki query bir view içerisinde listelediğinizde dışarıdan göndereceğiniz EmployeeID değerine göre size ilgili satıcının bağlı olduğu firmalar ve bu firmalara yıllar, aylar içerisinde yaptığı toplam satış ve ciro listesini size sunacaktır.

Çıktısı aşağıda ki gibidir;
[img] [img]

 

CevapAlıntı
Gönderildi : 11/01/2015 13:02
Hakan Uzuner
(@hakanuzuner)
Kıdemli Üye Yönetici

Süper olmuş, eline sağlık.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

CevapAlıntı
Gönderildi : 11/01/2015 21:15
Suat Hocaoğlu
(@SuatHocaoglu)
Üye

Merhaba,

Öncelikle kendim için elimden geleni yapmaya çalıştım bu konuda, inşallah başka arkadaşlara da lazım olur kullanırlar.Rica ederim.

Size son bir sorum daha olucak.Yukarıda ki mantık ile query'i Procedure çevirdim ve sayfama çektim sadece 1 adet kayıt döndükten sonra "Nesne başvurusu bir nesnenin örneğine ayarlanmadı." hatası alıyorum.Bunun null kontrolünü yaparsam sıkıntıyı gidericem diye düşünüyorum da bu konuda nasıl bir yol izleyebilirim yada bir kod örneği iletebilir misiniz?

 Teşekkür ederim, kolay gelsin.

CevapAlıntı
Gönderildi : 12/01/2015 15:44
Suat Hocaoğlu
(@SuatHocaoglu)
Üye

TAMAMDIR.ÇÖZDÜM SORUNU.

 SAYFA İÇERİSİNDE TANIMALDIĞIM LABEL DEĞERLERİNİ ALAMDIĞINDAN DOLAYI DOLDURMAYA ÇALIŞIYOR ITEMDATABOUND'DA BU SEBEPLE SIKINTI YARATIYOR.ŞUAN DA ÇALIŞIYOR.

TEŞEKKÜRLER.

CevapAlıntı
Gönderildi : 12/01/2015 16:11
Hakan Uzuner
(@hakanuzuner)
Kıdemli Üye Yönetici

Kendin çalıyorsun kendin oynuyorsun gibi oldu 🙂 eline sağlık.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

CevapAlıntı
Gönderildi : 13/01/2015 11:04
Suat Hocaoğlu
(@SuatHocaoglu)
Üye

Haklısınız, buraya soru yazarken aynı zamanda uğraşmaya devam ettiğim için çözümü de bulunca paylaşıyım dedim. 🙂 

CevapAlıntı
Gönderildi : 16/01/2015 22:12
Hakan Uzuner
(@hakanuzuner)
Kıdemli Üye Yönetici

Süpersin.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

CevapAlıntı
Gönderildi : 17/01/2015 21:35
Paylaş: