Jadi saya punya perintah yang terlihat seperti ini:

SELECT
UserID,
FacilityMMXID,
ScheduleDate,
StartTime,
EndTime
FROM TblPASchedule 
WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017

Outputnya terlihat seperti ini

UserID      FacilityMMXID ScheduleDate StartTime        EndTime
----------- ------------- ------------ ---------------- ----------------
244         1             2017-03-17   01:00:00         05:00:00
244         2             2017-03-17   01:00:00         05:00:00
244         3             2017-03-17   01:00:00         05:00:00
244         4             2017-03-17   01:00:00         05:00:00
244         5             2017-03-17   01:00:00         05:00:00
244         6             2017-03-17   01:00:00         05:00:00
244         7             2017-03-17   01:00:00         05:00:00
244         8             2017-03-17   01:00:00         05:00:00
244         9             2017-03-17   01:00:00         05:00:00
244         10            2017-03-17   01:00:00         05:00:00
244         11            2017-03-17   01:00:00         05:00:00
244         12            2017-03-17   01:00:00         05:00:00
244         13            2017-03-17   01:00:00         05:00:00
244         14            2017-03-17   01:00:00         05:00:00
244         15            2017-03-17   01:00:00         05:00:00
244         1             2017-03-17   05:00:00         22:00:00
244         2             2017-03-17   05:00:00         22:00:00
244         3             2017-03-17   05:00:00         22:00:00
244         4             2017-03-17   05:00:00         22:00:00
244         5             2017-03-17   05:00:00         22:00:00
244         6             2017-03-17   05:00:00         22:00:00
244         7             2017-03-17   05:00:00         22:00:00
244         8             2017-03-17   05:00:00         22:00:00
244         9             2017-03-17   05:00:00         22:00:00
244         10            2017-03-17   05:00:00         22:00:00
244         11            2017-03-17   05:00:00         22:00:00
244         12            2017-03-17   05:00:00         22:00:00
244         13            2017-03-17   05:00:00         22:00:00
244         14            2017-03-17   05:00:00         22:00:00
244         15            2017-03-17   05:00:00         22:00:00

Saya meninggalkan baris ID karena sebenarnya tidak penting dalam kasus ini. Juga- ya- Saya menyadari bahwa tabel ini sangat sangat berlebihan- Ini bukan sesuatu yang saat ini dapat saya perbaiki karena saya tidak diizinkan- Saya hanya dapat bekerja untuk membuat fungsi penjumlahan yang disebutkan di atas berfungsi.

Tujuan akhirnya adalah untuk memasangkan pasangan StartTime dan EndTime yang berbeda dan kemudian menemukan perbedaan tanggal dari mereka- dan kemudian, untuk seluruh bulan- temukan jumlah semua entri.

Ini sejauh yang saya dapatkan:

Menggunakan:

SELECT
UserID,
DATEDIFF(HOUR, StartTime, EndTime) AS 'Hours Worked'
FROM TblPASchedule WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017
GROUP BY UserId, StartTime, EndTime

Saya mendapatkan output menjadi:

UserID      Hours Worked
----------- ------------
244         4
244         17

Tapi saya tidak terlalu yakin tentang ke mana saya harus pergi dari sini.

Saya akhirnya harus membuatnya mengelompokkan jumlah ini berdasarkan UserID, tetapi saya kira selangkah demi selangkah. Saya menggunakan klausa where untuk bekerja dengan satu id untuk saat ini ...

1
Bitz 13 Maret 2017, 16:05

2 jawaban

Jawaban Terbaik

Kueri ini mendapatkan semua set UserID, Starttime, dan Endtime yang berbeda

;WITH CTE AS
 (SELECT DISTINCT UserID, StartTime, EndTime  FROM [dbo].[TblPASchedule])

SELECT SUM(DATEDIFF(MINUTE, StartTime, EndTime))/60.0 AS 'Hours Worked', UserID
FROM CTE GROUP BY UserID

HASILnya seperti ini

Hours Worked    UserID
1.666666        19
1.233333        37
0.500000        38
1
NikhilGoud 13 Maret 2017, 13:55

Sudahkah Anda mencoba membungkus sub kueri tambahan di atas grup Anda?

SELECT UserId, SUM('Hours Worked') as 'Hours Worked' FROM (
  SELECT
   UserID,
   DATEDIFF(HOUR, StartTime, EndTime) AS 'Hours Worked'
   FROM TblPASchedule WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017
   GROUP BY UserId, StartTime, EndTime
) AS temp
GROUP BY UserId
0
Venu 13 Maret 2017, 13:47