Yorumları: 107
Konuları: 19
Kayıt Tarihi: 26-09-2016
Rep Puanı: 625 Acemi
02-01-2019, Saat: 02:11
Arkadaşlar bir mantığa ihtiyacım var ?
Aşağıda göreceğiniz gibi bir tablo ve sonra bu tablodaki verilere göre alınan bir rapor örneği hazırladım. İşte sorum da tam olarak burda başlıyor aşağıdaki örnekteki gibi tek bir tabloda tutulan bu kayıtların bir alttaki resimde olduğu gibi yatay - dikey bir rapor alabilmem için bir mantığa ihtiyacım var.
Bu arada cari sayısı ve ürün sayısı da belli değil ?
Umarım anlatabilmişimdir.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.
Hz. Muhammed (sav.)
Yorumları: 176
Konuları: 0
Kayıt Tarihi: 01-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 556 Acemi
02-01-2019, Saat: 02:22
(02-01-2019, Saat: 02:11)KUNTAY Adlı Kullanıcıdan Alıntı: Arkadaşlar bir mantığa ihtiyacım var ?
Aşağıda göreceğiniz gibi bir tablo ve sonra bu tablodaki verilere göre alınan bir rapor örneği hazırladım. İşte sorum da tam olarak burda başlıyor aşağıdaki örnekteki gibi tek bir tabloda tutulan bu kayıtların bir alttaki resimde olduğu gibi yatay - dikey bir rapor alabilmem için bir mantığa ihtiyacım var.
Bu arada cari sayısı ve ürün sayısı da belli değil ?
Umarım anlatabilmişimdir.

MS SQL Server Kullanıyorsan
Pivot Table Kullanarak olayı çözebilirsin.
Cari Sayısını Önemi yok ama Yatayda dizeceğin columnların sayısının önemi var
Eğer Yatayda kullanacaklarının da sayısını bilmiyorsan
Dynamic pivot diye araman yeterli
Yorumları: 32
Konuları: 9
Kayıt Tarihi: 13-10-2016
Rep Puanı: 160 Başlangıç
Merhaba
@ FiRewaLL Arkadaşın dediği gibi Sqlden Pivot oluşturulabilirsin ama kolonların sabit tanımlanması durumu işi bozuyor
DevExpress 'de cxDBPivotGrid var çok kullanışlı bir araç.
Yorumları: 107
Konuları: 19
Kayıt Tarihi: 26-09-2016
Rep Puanı: 625 Acemi
Pivot Table tam olarak aradığım şey miş @ FiRewaLL teşekkür ederim.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.
Hz. Muhammed (sav.)
Yorumları: 176
Konuları: 0
Kayıt Tarihi: 01-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 556 Acemi
(02-01-2019, Saat: 18:14)emrahgs Adlı Kullanıcıdan Alıntı: Merhaba
@FiRewaLL Arkadaşın dediği gibi Sqlden Pivot oluşturulabilirsin ama kolonların sabit tanımlanması durumu işi bozuyor
DevExpress 'de cxDBPivotGrid var çok kullanışlı bir araç.
Dynamic Pivot 'u söylememdeki sebep tam olarak burasıydı.
Eğer i kolonlar sabit değil ve gelecek kolonları bilrmiyosanız dynamic pivot kullanılması gerekir..
(02-01-2019, Saat: 23:38)KUNTAY Adlı Kullanıcıdan Alıntı: Pivot Table tam olarak aradığım şey miş @FiRewaLL teşekkür ederim.
Ben Teşekkür ederim kardeşim.
Dynamic Pivot Karışık ve biraz da Sıkıntılı bir işlem
Bir Örnek Ekleyeyim
DECLARE @cols AS NVARCHAR(MAX) ,@query AS NVARCHAR(MAX); SELECT @cols = STUFF ( (SELECT ',' + QUOTENAME (col + '_' + CAST(t.AY AS VARCHAR(20)) ) FROM #STOKLAR t CROSS APPLY (SELECT 'ORT_ALIS_FIYATI' ,ORT_ALIS_FIYATI UNION ALL SELECT 'ORTALAMA_SAT_FIYATI' ,ORTALAMA_SAT_FIYATI UNION ALL SELECT 'ORT_TRANSFER_FIYATI' ,ORT_TRANSFER_FIYATI UNION ALL SELECT 'ORT_MALIYET_FIYATI' ,ORT_MALIYET_FIYATI) c(col, so) GROUP BY col ,T.AY ORDER BY AY FOR XML PATH (''), TYPE).value ('.', 'NVARCHAR(MAX)'),1,1,'' ); SET @query = 'SELECT STOK_KODU,STOK_ADI,BR,KOD_1,KOD_2,KOD_3,KOD_4,KOD_5,' + @cols + ' from (SELECT STOK_KODU,STOK_ADI,BR,KOD_1,KOD_2,KOD_3,KOD_4,KOD_5, col = col + ''_'' + cast(AY as varchar(4)), value from #STOKLAR t cross apply(select ''ORT_ALIS_FIYATI'', ORT_ALIS_FIYATI union all select ''ORTALAMA_SAT_FIYATI'', ORTALAMA_SAT_FIYATI union all SELECT ''ORT_TRANSFER_FIYATI'', ORT_TRANSFER_FIYATI UNION ALL SELECT ''ORT_MALIYET_FIYATI'', ORT_MALIYET_FIYATI) c (col, value) ) x pivot (sum(value) for col in ('+ @cols + ') ) p ';
EXECUTE sp_executesql @query;
Yukarıdaki örnekte ORT_ALIS_FIYATI,ORTALAMA_SAT_FIYATI,ORT_TRANSFER_FIYATI,ORT_MALIYET_FIYATI
kolonlarının yanına ay numaraları gelecektir
Ay numaralarını kullanıcı gönderildiği için tabiki de sayısını bilmiyoruz bu sebeple gelen şube kodu kadar ekleme yapacaktır.
SQL cümlesinin sonucunda
ORT_ALIS_FIYATI_01,ORTALAMA_SAT_FIYATI_01,ORT_TRANSFER_FIYATI_01,ORT_MALIYET_FIYATI_01
ORT_ALIS_FIYATI_02,ORTALAMA_SAT_FIYATI_02,ORT_TRANSFER_FIYATI_02,ORT_MALIYET_FIYATI_02
Şeklinde geri dönüşler olacaktır.
Faydalı olmuştur inşallah.
İyi Çalışmalar dilerim.
Yorumları: 230
Konuları: 11
Kayıt Tarihi: 06-07-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.178 Programcı
03-01-2019, Saat: 10:32
(Son Düzenleme: 03-01-2019, Saat: 13:53, Düzenleyen: ssahinoglu.)
Access'te CROSSTAB QUERY ile çok kolay yapabilirsin.
Bunun dışında normal sql cümlesi ile de yapabilirsin.
CASE(sql server) veya IIF(access) de olur.
SELECT TicUnvan,
(CASE UrunAdi WHEN A THEN Miktar END) as MiktarA,
(CASE UrunAdi WHEN B THEN Miktar END) as MiktarB,
(CASE UrunAdi WHEN C THEN Miktar END) as MiktarC
Sonra bunları GROUP BY / SUM yapabilirsin.
Yorumları: 850
Konuları: 149
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.177 Uzman
03-01-2019, Saat: 13:29
(Son Düzenleme: 03-01-2019, Saat: 13:29, Düzenleyen: adelphiforumz.)
Basit ve Dinamik bir procedure ile PivotTable oluşturmaya fikir vermesi açısından örnek yapmaya çalıştım.
Umarım işi yarar
Create proc [dbo].[TNSP_PivotTable]
(
@SqlMainDataText NVarchar(max),
@ColumnsFieldName Varchar(100),
@DataFieldName Varchar(100)
)
As
Begin
Declare @sSqlText NVarchar(Max),
@sCol NVarchar(max),
@nColumns NVarchar(max)
Set @sSqlText = '
Select @sCol =
Stuff (
(SELECT '','' + QUOTENAME (CAST(t.' + @ColumnsFieldName + ' AS VARCHAR(100)) )
FROM ( ' + @SqlMainDataText + ') t
GROUP BY T.' + @ColumnsFieldName + '
ORDER BY ' + @ColumnsFieldName + '
FOR XML PATH (''''), TYPE).value (''.'', ''NVARCHAR(MAX)''),1,1,'''' );
'
EXEC sp_executesql
@sSqlText,
N'@sCol nvarchar(max) OUTPUT',
@sCol OUTPUT
Set @nColumns = Replace(@sCol, '].[', '],[')
--Print @nColumns
Set @sSqlText = 'Select *
From ( '
+ @SqlMainDataText +
') as pTable
Pivot (
Sum(' + @DataFieldName + ')
For ' + @ColumnsFieldName + ' IN (' + @nColumns + ')
)
As Pvt
'
EXEC sp_executesql
@sSqlText
End
Kullanımı
Declare @SqlText NVarchar(max)
Set @SqlText = 'Select YukID, MasrafKalemi, Sum(Tutar) As Tutar
From YuklerAracGiderleri YAG
Inner Join GiderKalemleri GK On GK.ID = YAG.AracGiderleriKalemID
Group BY YukID, MasrafKalemi
'
Exec TNSP_PivotTable @SqlMainDataText = @SqlText,
@ColumnsFieldName = 'MasrafKalemi',
@DataFieldName = 'Tutar'
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
Yorumları: 107
Konuları: 19
Kayıt Tarihi: 26-09-2016
Rep Puanı: 625 Acemi
@ adelphiforumz @ FiRewaLL Kod örnekleriniz için teşekkürler bende sizin kodlara benzer bir şekilde yaptım dinamik yapıyı.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.
Hz. Muhammed (sav.)
Yorumları: 850
Konuları: 149
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.177 Uzman
(04-01-2019, Saat: 02:03)KUNTAY Adlı Kullanıcıdan Alıntı: @adelphiforumz @FiRewaLL Kod örnekleriniz için teşekkürler bende sizin kodlara benzer bir şekilde yaptım dinamik yapıyı.
Teşekkürlerinizi Puanlarla taçlandırmanız dileği ile
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
Yorumları: 4.245
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.107 Üstad
(04-01-2019, Saat: 09:34)adelphiforumz Adlı Kullanıcıdan Alıntı: (04-01-2019, Saat: 02:03)KUNTAY Adlı Kullanıcıdan Alıntı: @adelphiforumz @FiRewaLL Kod örnekleriniz için teşekkürler bende sizin kodlara benzer bir şekilde yaptım dinamik yapıyı.
Teşekkürlerinizi Puanlarla taçlandırmanız dileği ile 
Vermeyenlerin açığını kapatıyorum.
DelphiCan'dır!
|