SQL在值更改时查询新列的枢轴值

  • 本文关键字:新列 查询 SQL sql sql-server
  • 更新时间 :
  • 英文 :


我正在寻找与员工打卡进出有关的查询的帮助。

我的代码是:

SELECT CAST(EVENTTIME AS Date) AS Date, FORMAT(EVENTTIME, 'HH:mm') AS Time,SUM(UserID) AS UserID, FirstName + Space(1) + Surname, EventSubTypeDescription
FROM EventsEx
WHERE EventTime >= '2022-05-09' AND (PeripheralName ='clock (In)' OR PeripheralName ='clock (Out)')
GROUP BY userid, EventTime, FirstName, Surname, EventSubTypeDescription
ORDER BY Date,UserID, Time ASC

结果是:

UserIDtbody> <<tr>
日期时间UserNameEventSubTypeDescription
2022-05-0907:53393詹妮弗时钟在
2022-05-0933393詹妮弗打卡
2022-05-0914:06393詹妮弗时钟在
2022-05-0916:57393詹妮弗打卡
2022-05-0907:59401机构2时钟在
2022-05-0912:58401机构2打卡
2022-05-0913:27401机构2时钟在
2022-05-0916:56401机构2打卡
2022-05-0907:57422小胡子时钟在
2022-05-0913:56422小胡子打卡
2022-05-0907:58432机构4时钟在
2022-05-0913:00432机构4打卡
2022-05-0913:30432机构4时钟在
2022-05-0916:56432机构4打卡
2022-05-0907:57434约旦时钟在
2022-05-0913:32434约旦打卡
2022-05-0914:03434约旦时钟在
2022-05-0916:59434约旦打卡
2022-05-0907:59438亚当时钟在
2022-05-0959438亚当打卡
2022-05-0913:29438亚当时钟在
2022-05-0916:56438亚当打卡

从当前的输出表开始,您可以根据特定的日期和用户进行分区,为每一行分配列号。然后使用CASE构造上的MAX函数分别提取clock in,clock out,clock in 2,clock out 2的值:

SELECT Date,
UserID,
Username,
MAX(CASE WHEN ColNum=1 THEN Time ELSE NULL END) AS Clock_in,
MAX(CASE WHEN ColNum=2 THEN Time ELSE NULL END) AS Clock_out,
MAX(CASE WHEN ColNum=3 THEN Time ELSE NULL END) AS Clock_in_2,
MAX(CASE WHEN ColNum=4 THEN Time ELSE NULL END) AS Clock_out_2
FROM (SELECT *,
ROW_NUMBER() OVER(PARTITION BY Date, UserID 
ORDER     BY Time         ) ColNum
FROM output_table) ranked_clock_events
GROUP BY Date,
UserID,
Username
ORDER BY UserID

在这里试试。

边注1:要将此查询与您的查询一起使用,只需替换output table

的代码即可。旁注2:为了更好的查询,避免您的中间结果(由output_table结果集给出),如果您设法获得EventEx表,请在这里ping我。

相关内容

  • 没有找到相关文章

最新更新