Try this;
var dtTable1 = new DataTable("Table1");
var dtTable2 = new DataTable("Table2");
dtTable1.Columns.AddRange
(
new DataColumn[]
{
new DataColumn("ID", typeof (int)),
new DataColumn("Intalment", typeof (string)),
new DataColumn("Amount", typeof (float)),
new DataColumn("Date", typeof (DateTime))
}
);
dtTable2.Columns.AddRange
(
new DataColumn[]
{
new DataColumn("ID", typeof (int)),
new DataColumn("FirstInstAmount", typeof (float)),
new DataColumn("SecondInstAmount", typeof (float)),
new DataColumn("ThirdInstAmount", typeof (float)),
new DataColumn("FirstInstDate", typeof (DateTime)),
new DataColumn("SecondInstDate", typeof (DateTime)),
new DataColumn("ThirdInstDate", typeof (DateTime))
}
);
var rowCon = dtTable1.NewRow();
rowCon["ID"] = 1;
rowCon["Intalment"] = "FirstInst";
rowCon["Amount"] = 10000;
rowCon["Date"] = new DateTime(2014, 4, 12);
dtTable1.Rows.Add(rowCon);
rowCon = dtTable1.NewRow();
rowCon["ID"] = 1;
rowCon["Intalment"] = "SecondInst";
rowCon["Amount"] = 10000;
rowCon["Date"] = new DateTime(2014, 4, 13);
dtTable1.Rows.Add(rowCon);
rowCon = dtTable1.NewRow();
rowCon["ID"] = 1;
rowCon["Intalment"] = "ThirdInst";
rowCon["Amount"] = 5000;
rowCon["Date"] = new DateTime(2014, 4, 14);
dtTable1.Rows.Add(rowCon);
rowCon = dtTable1.NewRow();
rowCon["ID"] = 2;
rowCon["Intalment"] = "FirstInst";
rowCon["Amount"] = 10000;
rowCon["Date"] = new DateTime(2014, 4, 14);
dtTable1.Rows.Add(rowCon);
rowCon = dtTable1.NewRow();
rowCon["ID"] = 2;
rowCon["Intalment"] = "SecondInst";
rowCon["Amount"] = 7000;
rowCon["Date"] = new DateTime(2014, 4, 17);
dtTable1.Rows.Add(rowCon);
var aa = from r in dtTable1.AsEnumerable()
group r by r.Field<int>("ID") into g
select new
{
g.Key,
firstIntalAmount = g.Where(s => s.Field<string>("Intalment").Equals("FirstInst")).Select(t => t.Field<float>("Amount")).FirstOrDefault(),
secondIntalAmount = g.Where(s => s.Field<string>("Intalment").Equals("SecondInst")).Select(t => t.Field<float>("Amount")).FirstOrDefault(),
thirdIntalAmount = g.Where(s => s.Field<string>("Intalment").Equals("ThirdInst")).Select(t => t.Field<float>("Amount")).FirstOrDefault(),
firstIntalDate = g.Where(s => s.Field<string>("Intalment").Equals("FirstInst")).Select(t => t.Field<DateTime>("Date")).FirstOrDefault(),
secondIntalDate = g.Where(s => s.Field<string>("Intalment").Equals("SecondInst")).Select(t => t.Field<DateTime>("Date")).FirstOrDefault(),
thirdIntalDate = g.Where(s => s.Field<string>("Intalment").Equals("ThirdInst")).Select(t => t.Field<DateTime>("Date")).FirstOrDefault()
};
foreach (var item in aa)
{
var row = dtTable2.NewRow();
row["ID"] = item.Key;
row["FirstInstAmount"] = item.firstIntalAmount;
row["SecondInstAmount"] = item.secondIntalAmount;
row["ThirdInstAmount"] = item.thirdIntalAmount;
row["FirstInstDate"] = item.firstIntalDate;
row["SecondInstDate"] = item.secondIntalDate;
row["ThirdInstDate"] = item.thirdIntalDate;
dtTable2.Rows.Add(row);
}