Forum
Sql sorgum aşağıdaki gibi;
select ('DİZ')as Tür,COALESCE(SUM(adet),0)as ADT,ay from(SELECT Tdkt,COUNT(DISTINCT Tgs) AS adet,MONTH(Ttar) as ay FROM xTHC WHERE Tdkt='Metin' and Taturb1 like '01%' GROUP BY Tdkt, Taturb1,MONTH(Ttar)) xTHC GROUP BY Tdkt,ay
union all
select ('OMUZ')as Tür,COALESCE(SUM(adet),0)as ADT,ay from(SELECT Tdkt,COUNT(DISTINCT Tgs) AS adet,MONTH(Ttar) as ay FROM xTHC WHERE Tdkt='Metin' and Taturb1 like '05%' GROUP BY Tdkt, Taturb1,MONTH(Ttar)) xTHC GROUP BY Tdkt,ay --order by ay
sorgu sonucum
Tür ADT AY
DİZ 20 1
DİZ 28 2
DİZ 35 3
DİZ 16 4
DİZ 20 5
DİZ 17 6
DİZ 16 7
DİZ 13 8
DİZ 16 9
OMUZ 2 1
OMUZ 1 2
OMUZ 3 3
OMUZ 4 4
OMUZ 2 7
OMUZ 1 9
Sorunum şu bu sorguyla ADT değeri varsa karşılığına ay bilgisini getiriyor. Ancak istediğim şey 1. aydan 12 aya kadar sıralama olması ve bu değrlere karşı ADT değerlerini getirmesi eğer adet değeri yoksa da 0 değeri vermesi.Örnek aşağıda tablo şeklinde görebilirsiniz.
DİZ 20 1
DİZ 28 2
DİZ 35 3
DİZ 16 4
DİZ 20 5
DİZ 17 6
DİZ 16 7
DİZ 13 8
DİZ 16 9
DİZ 0 10
DİZ 0 11
DİZ 0 12
OMUZ 2 1
OMUZ 1 2
OMUZ 3 3
OMUZ 4 4
OMUZ 0 5
OMUZ 0 6
OMUZ 2 7
OMUZ 0 8
OMUZ 1 9
OMUZ 0 10
OMUZ 0 11
OMUZ 0 12
Yardımlarınızı rica ediyorum.
Onur bu bi sorun değil! Bi ödev yada başka bişey için sen cevap istiyorsun. Nasıl olsa yazarlar demek yerine gidip araştırıp öğrenebilirsin nasıl olduğunu.
Yaşar bey;
Keşke dediğiniz gibi bir ödev peşinde olsaydım. 10 sene aradan sonra zorunluluktan dolayı sql'e girişince bu konudan çok uzaklaştığımı fark ettim.
Aynı şekilde eğer aciliyetim olmasa zaten 2 ay sıkar belli bir seviyeye gelirdim.Ancak şu anda sahip olamadığım şey ekstra zaman.
Yine de zahmet edip okuduğunuz ve cevap verdiğiniz için teşekkür ederim.
Onur bey böyle bi tepki vermemin sebebi açtığınız toplamda 4 konu başlığı var ve bu konu ile alakalı. Ve eylül ayının başından beri gelmeye başlamış ve dediğim gibi sorun sabit. Okulların başlaması ile ben bunu bu sıklıkta görünce, ödev olrak tahmin ettim ve ona göre cevap yazdım. Ama özür dilerim böyle bir tepki için eğer sizi kırdıysam. Kusura bakmayın. Bizimde yeterli zamanımız olmadığından dolayı inanın böyle sorulara cevap verme konusunda sıkıntılar yaşıyoruz. Keşke yeterli zamanımız olsa ve bu konular hakkında makaleler yazbilsek. Tekrardan özür dilerim kırdı isem. Çalışmanızda kolay gelsin.
Yaşar bey;
Empati kurunca bende olsam eminim sizin verdiğiniz tepkiyi verirdim.
Teşekkür ederim size de iyi çalışmalar.
--ilk once sizin sonuclarınızın olduğu tablo benzeri bir tablo oluşturuyoruz
Declare @tSonuclar table (Tur nvarchar(10),Adet int ,Ay int)
insert into @tSonuclar values('Omuz',2,1)
insert into @tSonuclar values('Omuz',1,2)
insert into @tSonuclar values('Omuz',3,3)
insert into @tSonuclar values('Omuz',4,4)
insert into @tSonuclar values('Omuz',2,7)
insert into @tSonuclar values('Omuz',1,9)
insert into @tSonuclar values('Diz',20,1)
insert into @tSonuclar values('Diz',15,3)
insert into @tSonuclar values('Diz',5,7)
insert into @tSonuclar values('Diz',5,9)
select * from @tSonuclar order by Tur,Ay
---Sonra 1 den 12 ye kadar aylar olan bir tablo oluşturuyoruz
Declare @ttAylar table (Ay int)
;WITH R AS
(
SELECT 1 as N
UNION ALL
SELECT N+1 as N
FROM R WHERE N < 12
)
insert into @ttAylar
SELECT N FROM R
--select * from @ttAylar
--Eğer Sonuclar tablsounda olan her Distinct alan için aylar ile cross join yaparsak
--son kayıt için bir taslak oluşmuış olur
select Distinct Tur,ttAylar.Ay from @tSonuclar
cross apply @ttAylar ttAylar
---iki tabloyu taslak tablodan tüm kayıtları alarak joinliyoruz
select ttTemp.Tur ,isnull(Adet,0) as Adet,ttTemp.Ay from
(
select Distinct Tur,ttAylar.Ay from @tSonuclar
cross apply @ttAylar ttAylar
)ttTemp
left outer join @tSonuclar tSonuclar on tSonuclar.Ay = ttTemp.Ay and tSonuclar.Tur = ttTemp.Tur
order by ttTemp.Tur,ttTemp.Ay