C# Pivot Table Oluşturma

Merhabalar, bugünkü yazımızda bir önceki yazıda anlattığım Sql’de pivot table oluşturmayı Visual Studio taraflı nasıl kullanacağımızı anlatacağım.

Ana tablomuz bu üstteki resim, çevirmek istediğimiz yapı alttaki;

Ve bunun için gerekli Sql sorgumuzu bir önceki yazıda hazırlamıştık.

SELECT tarih, Marmara, Doğu_Anadolu, Ege,İç_Anadolu, 
Doğu_Anadolu, Güneydoğu_Anadolu, Karadeniz, Akdeniz FROM
 
(select[Region],[Sales], Cast([SalesDate] as date) as tarih from Cars) as CTable 
 
PIVOT (SUm(Sales) For Region in (Marmara,Doğu_Anadolu,Ege,İç_Anadolu,
Dogu_Anadolu,Güneydoğu_Anadolu,Karadeniz,Akdeniz)) as CarsTable 

İlk olarak VS tarafında yapmak istediğimiz tablo yapısına uygun bir model oluşturuyoruz.

 public class CarPivot
    {
        public string SalesDate { get; set; }
        public List<int> Sales { get; set; }

        public CarPivot()
        {
            Sales = new List<int>();
        }
    }

Sonra metodumuzu oluşturmaya geçebiliriz.

 public List<CarPivot> CarPivotList()
  {
    List<CarPivot> carList = new List<CarPivot>();

 using (var command = _context.Database.GetDbConnection()
.CreateCommand())
            {
     command.CommandText = "SELECT tarih, Marmara, Doğu_Anadolu, Ege,İç_Anadolu," +
 " Doğu_Anadolu, Güneydoğu_Anadolu, Karadeniz, Akdeniz FROM " +
 "(select[Region], [Sales], Cast([SalesDate] as date)
 as tarih from Cars) as CTable " +
 "PIVOT(SUm(Sales) For Region in (Marmara, Doğu_Anadolu, Ege, İç_Anadolu," +
  "Dogu_Anadolu, Güneydoğu_Anadolu, Karadeniz, Akdeniz)) as CarsTable";
   command.CommandType = System.Data.CommandType.Text;

   _context.Database.OpenConnection();

   using (var reader = command.ExecuteReader())
         {
          while (reader.Read())
         {
    CarPivot cc = new CarPivot();
  cc.SalesDate = reader.GetDateTime(0).ToShortDateString();

    Enumerable.Range(1, 8).ToList().ForEach(x =>
     {
      if (System.DBNull.Value.Equals(reader[x]))
     {
     cc.Sales.Add(0);
     }
    else
    {
    cc.Sales.Add(reader.GetInt32(x));
    }
    });
    carList.Add(cc);
}
   }

   _context.Database.CloseConnection();

    return carList;
    }
        }

İlk başta biraz karmaşık gelebilir. Burada okunabilirliği az siz kendi projenize kopyalayıp orada çalışırsanız anlamanız daha kolaylaşacaktır. Bir sonraki yazımda görüşmek üzere.

Sağlıcakla kalın.

Bir cevap yazın