var rhh = from rh in IResearch
join c in ICheckStatus on rh.ID_Research equals c.ID_Research into JoinedEmpDept1
from c in JoinedEmpDept1.DefaultIfEmpty()
join s in IStatusTasks on c.ID_StatusTask equals s.ID_StatusTask into JoinedEmpDept
from s in JoinedEmpDept.DefaultIfEmpty()
select new
{
ResearchNo = rh.ResearchNo, //รหัสโครงการ
ResearchN = rh.ResearchN, //ชื่องานวิจัย
Yearbudget = rh.Yearbudget, //ปี
StastusTask = s.StatusTask1, //สถานะ
};
GridView3.DataSource = rhh.ToList();
GridView3.DataBind();
ลองทำ ตามนี้ดูครับ
นำ ตารางที่ join กัน ไว้ ไปทำเป็น views ครับ โดยใน views นี้ให้ select case ฟิวด์ status เพิ่มมาอีก1 ฟิวด์
ตัวอย่าง คำสั่ง views : Vw_Research Code (SQL)
SELECT TOP (100) PERCENT id, name, years, status,
(CASE WHEN [status] = 'เบิกจ่ายงวดที่ 1' THEN 1 WHEN [status] = 'เบิกจ่ายงวดที่ 2' THEN 2 WHEN [status] = 'เบิกจ่ายงวดที่ 3' THEN 3 WHEN [status] = 'ส่งร่างรายงานฉบับ สมบูรณ์'
THEN 4 WHEN [status] = 'ส่งรายงานฉบับ สมบูรณ์' THEN 5 WHEN [status] = 'เสร็จแล้ว' THEN 6 ELSE 0 END) AS statusnumber
FROM dbo.Research
GROUP BY id, name, years, status
ORDER BY years DESC
SELECT TOP (100) PERCENT id, name,
case when( sum(CASE WHEN [statusnumber] = 1 THEN 1 ELSE 0 END)) =1 then 'บิกจ่ายงวดที่ 1' else '' end AS status1,
case when( sum(CASE WHEN [statusnumber] = 2 THEN 2 ELSE 0 END)) =2 then 'บิกจ่ายงวดที่ 2' else '' end AS status2,
case when( sum(CASE WHEN [statusnumber] = 3 THEN 3 ELSE 0 END)) =3 then 'เบิกจ่ายงวดที่ 3' else '' end AS status3,
case when( sum(CASE WHEN [statusnumber] = 4 THEN 4 ELSE 0 END)) =4 then 'ส่งร่างรายงานฉบับ สมบูรณ์' else '' end AS status4,
case when( sum(CASE WHEN [statusnumber] = 5 THEN 5 ELSE 0 END)) =5 then 'ส่งรายงานฉบับ สมบูรณ์' else '' end AS status5,
case when( sum(CASE WHEN [statusnumber] = 6 THEN 6 ELSE 0 END)) =6 then 'เสร็จแล้ว' else '' end AS status6
FROM VW_Research
group by id,name,years
ORDER BY years DESC
SELECT TOP 100 PERCENT [ResearchNo],[ResearchN],[Yearbudget],[CheckStatusDate],
case when( sum(CASE WHEN [ID_StatusTask] = 1 THEN 1 ELSE 0 END)) =1 then 'เบิกจ่ายงวดที่ 1' else '' end AS status1,
case when( sum(CASE WHEN [ID_StatusTask] = 2 THEN 2 ELSE 0 END)) =2 then 'เบิกจ่ายงวดที่ 2' else '' end AS status2,
case when( sum(CASE WHEN [ID_StatusTask] = 3 THEN 3 ELSE 0 END)) =3 then 'เบิกจ่ายงวดที่ 3' else '' end AS status3,
case when( sum(CASE WHEN [ID_StatusTask] = 4 THEN 4 ELSE 0 END)) =4 then 'ส่งร่างรายงานฉบับสมบูรณ์' else '' end AS status4,
case when( sum(CASE WHEN [ID_StatusTask] = 5 THEN 5 ELSE 0 END)) =5 then 'ส่งรายงานฉบับสมบูรณ์' else '' end AS status5,
case when( sum(CASE WHEN [ID_StatusTask] = 6 THEN 6 ELSE 0 END)) =6 then 'สำเร็จแล้ว' else '' end AS status6
FROM [Irdbase].[dbo].[View_1]
GROUP BY ResearchNo, ResearchN, Yearbudget, CheckStatusDate
ORDER BY Yearbudget DESC
var rhh = from v in db.View_1s //ดึงมาจาก View ที่สร้างไว้
select new
{
ResearchNo = v.ResearchNo,
ResearchN = v.ResearchN,
Yearbudget = v.Yearbudget,
StastusTask = v.StatusTask
};
var rhh2 = from rhhItem in rhh
group rhhItem by new
{
rhhItem.ResearchNo,
rhhItem.ResearchN,
rhhItem.Yearbudget
} into r
select new
{
ResearchNo = r.Key.ResearchNo,
ResearchN = r.Key.ResearchN,
Yearbudget = r.Key.Yearbudget,
StastusTask = (from rItem in r select rItem.StastusTask)
.Aggregate((c, n) => c + " , " + n)
};
GridView3.DataSource = rhh2.ToList();
GridView3.DataBind();
//รันแล้วมัน error ว่า The query operator 'Aggregate' is not supported.