Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现此SQL查询?_Sql_Sql Server - Fatal编程技术网

如何实现此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是打卡,但我们确实需要更多的澄清。你是一只乐于助人的松鼠,但值得考虑的是,这个平台有足够多的厚颜无耻的免费劳工请求,没有人鼓励他们再次这样做。我建议不要在事先没有任何努力的情况下回答问题。哈!说到魔鬼,五小时后的行动。他们只需要在帖子上加上“我已经尝试了一切”。