 |
|
สอบถามเกี่ยวกับการแปลงวันที่และเวลาและการ กรุ๊ปให้อยู่ในแนวนอนครับ |
|
 |
|
|
 |
 |
|
สอบถามหน่อยครับ ผม Select ข้อมูลออกมาได้เป็นแบบนี้ครับ

Code (C#)
private void showdgvinoutwork()
{
string sql = "SELECT checkinout.USERID,checkinout.CHECKTIME,userinfo.Badgenumber,emp.nameth,emp.dept_ID,emp.statusemp_ID,emp.statusempid_ID,emp.party_ID" + Environment.NewLine;
sql += "FROM tbl_Employee as emp " + Environment.NewLine;
sql += "INNER JOIN USERINFO AS userinfo ON emp.employee_ID = USERINFO.Badgenumber" + Environment.NewLine;
sql += "INNER JOIN CHECKINOUT AS checkinout ON userinfo.USERID = checkinout.USERID" + Environment.NewLine;
sql += "INNER JOIN tbl_Antecedent AS title ON emp.ante_ID = title.ante_ID";
dtDgv = connect_db.SelectData(sql);
DgvInOutWork.DataSource = dtDgv;
}
แต่ผมอยากให้มันเป็นแบบนี้ ครับ ขอวิธีและแนวทางหน่อยครับ

Tag : .NET, Ms SQL Server 2008, Crystal Report, Win (Windows App), C#
|
|
 |
 |
 |
 |
Date :
2017-03-22 23:25:46 |
By :
kittisak30 |
View :
956 |
Reply :
4 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองดูวิธีการ Pivot นะครับ ทำได้ แต่ Query อาจจะยากหน่อย
|
 |
 |
 |
 |
Date :
2017-03-23 10:01:28 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยัง งงๆ ครับ
Code (SQL)
SELECT
USERID,CAST(DATEPART(dd, CHECKTIME) AS varchar(2)) + '/' + CAST(DATEPART(mm, CHECKTIME) AS varchar(2)) + '/' + CAST(DATEPART(yyyy, CHECKTIME) AS varchar(4)) AS EmpDate,
(CHECKTIME) AS [time1],
(CHECKTIME) AS [time2],
(CHECKTIME) AS [time3],
(CHECKTIME) AS [time4]
FROM CHECKINOUT
WHERE USERID = '1'

ข้อมูลมันไม่เรียงเลยครับ
|
ประวัติการแก้ไข 2017-03-23 15:01:26
 |
 |
 |
 |
Date :
2017-03-23 13:22:19 |
By :
kittisak30 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

เหมือนจะต้องหา ว่าวันไหนมี rows มากสุดก่อนรึป่าวครับ
เพราะ จำนวน column = rows
ลองแบบนี้ดูไม๊ครับ
1. SELECT ข้อมูลมาธรรมดา ก่อน
2. สร้าง datatable โดย เลือกเอาวันที่ rows สูงสุด มาคิดจำนวน column
3. for loop add data เข้าใน datatable ที่สร้าง
4. DgvInOutWork.DataSource = datatable ที่สร้าง;
แบบนี้ก็แก้ขัดไปก่อนได้เหมือนกันครับ
|
ประวัติการแก้ไข 2017-03-23 16:30:21
 |
 |
 |
 |
Date :
2017-03-23 16:27:10 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ช่วยหน่อยครับ ตอนนี้ ข้อมูลออกแล้วครับ แต่เวลาแต่เวลา เป็น min max

Code (SQL)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(date +'_'+Logname)
from
(
select checktime,
convert(char(10),checktime, 101) date,
LogName
from CHECKINOUT
cross apply
(
select 'In' LogName
union all
select 'Out'
) l
) s
group by convert(char(10), checktime, 112), date, Logname
order by convert(char(10), checktime, 112)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select userid, name, badgenumber, '+@cols+'
from
(
select userid, name, badgenumber,
convert(char(8), doortime, 108) DoorTime,
date + ''_''+ col col_names
from
(
select p.userid, p.name, p.badgenumber,
convert(char(10),d.checktime, 101) date,
min(d.checktime) [In],
max(d.checktime) [Out]
from USERINFO p
left join CHECKINOUT d
on p.userid = d.userid
group by p.userid, p.name, p.badgenumber,
convert(char(10),d.checktime, 101)
)src
unpivot
(
doortime
for col in ([In], [Out])
) unpiv
) p
pivot
(
max(doortime)
for col_names in('+@cols+')
) piv'
execute(@query)
แต่ที่อยากให้ออกคือ รูปแบบนี้ครับ
USERID | NAME | BADGENUMBER | 03/08/2017 _ IN | 03/08/2017_OUT | 03/08/2017 _IN | 03/08/2017 _OUT |
_________________________________________________________________________________________
1 | ทดสอบ | 15212 | 7:53 | 12:00 | 12:43 | 17:02 |
|
 |
 |
 |
 |
Date :
2017-03-25 11:28:38 |
By :
kittisak30 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|