【问题标题】:sql SYNTAX ERROR IN CASEsql 语法错误以防万一
【发布时间】:2018-05-27 02:33:02
【问题描述】:

我有一个格式如下的表格。

EMP NUMBER, ATT DATE,   ATT TIME
00001   01-03-2018  08:45
00001   01-03-2018  20:50
00001   02-03-2018  08:00
00001   02-03-2018  18:50

我被要求得到以下结果:

EMP NUMBER,  ATT DATE,    IN TIME,   OUT TIME
00001      01-03-2018   08:45     20:50
00001      02-03-2018   08:00     18:50

我设法使用以下查询:

SELECT EMP_NUMBER, ATT_DATE,MIN(ATT_TIME) AS IN_TIME,MAX(ATT_TIME) AS OUT_TIME 
        INTO TABLE1
FROM FJ 
GROUP BY EMP_NUMBER,ATT_DATE

即使我得到了我想要的答案,但我担心员工在晚上 10 点之前登录并在第二天早上 5 点离开时的情况,因此我尝试了以下方法:

SELECT EMP_NUMBER, ATT_DATE,
        CASE
            WHEN ATT_TIME >= 12
            THEN MIN(ATT_TIME)
            ELSE MAX(ATT_TIME)
            AS IN_TIME,
        CASE
            WHEN ATT_TIME < 12
                THEN MIN(ATT_TIME)
                ELSE MAX(ATT_TIME)
         AS OUT_TIME,
         INTO TABLE1
    FROM FJ 
    GROUP BY EMP_NUMBER,ATT_DATE

这会在“AS”附近引发语法错误,您能帮我弄清楚我哪里出错了吗?提前致谢。

【问题讨论】:

  • 在我看来你应该找一个不同的键盘。您现在使用的那个似乎有一个卡住的 CAPS LOCK 键。您应该替换它,因为您不希望这里(或互联网上的其他任何地方)的人认为您在对他们大喊大叫。
  • 求你了,别喊了! case 的语法是CASE ... END。你忘了END

标签: mysql sql sql-server


【解决方案1】:

不确定查询逻辑,但您的两个 CASE 语句都缺少“END”子句。

SELECT EMP_NUMBER, ATT_DATE,
        CASE
            WHEN ATT_TIME >= 12
            THEN MIN(ATT_TIME)
            ELSE MAX(ATT_TIME)
         END               --<-- You are missing "END" here 
            AS IN_TIME,
        CASE
            WHEN ATT_TIME < 12
                THEN MIN(ATT_TIME)
                ELSE MAX(ATT_TIME)
         END                    --<-- and here 
         AS OUT_TIME  --<-- also you had an extra comma here
         INTO TABLE1
    FROM FJ 
    GROUP BY EMP_NUMBER,ATT_DATE

【讨论】:

  • 是的,它确实解决了错误,最后得到了一个新的 Msg 156,“关键字'INTO'附近的语法不正确”。
  • @balasubramanie 是的,你还有一个额外的逗号,请仔细查看我的回答
  • 对不起我的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多