如何实现此SQL查询?
如何输出与预期结果类似的示例记录 样本数据库如何实现此SQL查询?,sql,sql-server,Sql,Sql Server,如何输出与预期结果类似的示例记录 样本数据库 Table Sample1 Column Status Int Column dtDateTime dateTime Column User varchar(50) 记录 User dtDateTime Status User1 2017-05-19 08:00:00.000 1 User1 2017-05-19 17:05:00.000
Table Sample1
Column Status Int
Column dtDateTime dateTime
Column User varchar(50)
记录
User dtDateTime Status
User1 2017-05-19 08:00:00.000 1
User1 2017-05-19 17:05:00.000 2
User1 2017-05-20 09:05:00.000 1
User1 2017-05-21 17:35:00.000 2
列状态上的记录1为Time IN,记录2为Time Out
预期结果
User WORK-DATE Time-IN Time-OUT Status
user1 2017-05-19 08:00:00.000 17:05:00.000 COMPLETE
User1 2017-05-20 09:05:00.000 NULL NO OUT
User1 2017-05-21 NULL 17:35:00.000 NO IN
我的水晶球提出了这个问题:
SELECT User,
CONVERT(DATE, dtDateTime) AS [WORK-DATE],
CASE WHEN MIN(STATUS) <> MAX(STATUS) THEN 'COMPLETE'
WHEN MAX(STATUS) = 1 THEN 'NO OUT'
WHEN MIN(STATUS) = 2 THEN 'NO IN'
END
FROM Sample1
GROUP BY User, CONVERT(DATE, dtDateTime)
选择用户,
将(日期,dtDateTime)转换为[工作日期],
最小(状态)最大(状态)然后“完成”的情况
当最大值(状态)=1时,则为“无输出”
当最小值(状态)=2时,则“不在”
终止
来自样本1
按用户分组,转换(日期,dtDateTime)
编辑:水晶球之前没有显示时间列
SELECT User,
CONVERT(DATE, dtDateTime) AS [WORK-DATE],
MAX(CASE WHEN STATUS = 1 THEN CONVERT(TIME, dtDateTime) END) AS [TIME-IN],
MAX(CASE WHEN STATUS = 2 THEN CONVERT(TIME, dtDateTime) END) AS [TIME-OUT],
CASE WHEN MIN(STATUS) <> MAX(STATUS) THEN 'COMPLETE'
WHEN MAX(STATUS) = 1 THEN 'NO OUT'
WHEN MIN(STATUS) = 2 THEN 'NO IN'
END AS Status
FROM Sample1
GROUP BY User, CONVERT(DATE, dtDateTime)
选择用户,
将(日期,dtDateTime)转换为[工作日期],
最大值(状态为1时的情况下,然后将(TIME,dtDateTime)END转换为[TIME-IN],
最大值(状态为2时的情况),然后将(时间、dtDateTime)结束转换为[超时],
最小(状态)最大(状态)然后“完成”的情况
当最大值(状态)=1时,则为“无输出”
当最小值(状态)=2时,则“不在”
以身份结束
来自样本1
按用户分组,转换(日期,dtDateTime)
您能否解释如何从样本数据获取预期结果?确定预期结果状态的逻辑是什么??你需要详细说明你的问题。我假设1是打卡,2是打卡,但我们确实需要更多的澄清。你是一只乐于助人的松鼠,但值得考虑的是,这个平台有足够多的厚颜无耻的免费劳工请求,没有人鼓励他们再次这样做。我建议不要在事先没有任何努力的情况下回答问题。哈!说到魔鬼,五小时后的行动。他们只需要在帖子上加上“我已经尝试了一切”。