sql语法不适用于group by子句

时间:2016-03-09 15:17:25

标签: sql sql-server

我正在写sql而且我被困在以下行

    select employeeid, (case paidL when'1' 
                               Then
                               1
                                   when '0'
                               Then
                               0
                               end) as 'paidLeave' from Lea order by employeeid group by 'paidLeave'                         

以上一行如果给我错误与' paidLeave'

相关

任何有关改进语法以删除错误的帮助都将不胜感激

4 个答案:

答案 0 :(得分:5)

您的案例语法显然是错误的。但是您还有另一个错误:从不对列别名使用单引号。这是一个错误等待发生的例子。

最好使用不需要转义的列名和表名。如果他们这样做,请使用方括号或双引号。

您想要的查询应如下所示:

select employeeid, 
       (case when paidL = '1' then 1
             when paidl = '0 then 0
        end) as paidLeave
from Lea
order by employeeid;

我不知道group by 'paidleave'应该做什么。在两个方面,它在语法上是错误的。如果你想要总和,那么查询将是:

select employeeid, 
       sum(case when paidL = '1' then 1
                when paidl = '0 then 0
           end) as paidLeave
from Lea
group by employeeid;

我认为你需要研究基本的SQL语法。网上和书中有很多资源。

答案 1 :(得分:1)

你的案例语法都错了,请使用:

 select employeeid, (case when paidL  = '1' 
                          Then 1
                          when paidL = '0'
                          Then  0
                    end) as paidLeave 
 from Lea   
 order by employeeid    

另外,按顺序排在后面!

另一方面,引号用于字符串,而不是列名。也许你的意思是“但你不必这样做,因为这不是一个保留的词。”

这整个查询似乎有误,如果你有一个以上的员工,那么这个小组没有任何意义,也许你打算按雇员分组并按payleave订购?

也许您打算按员工ID分组并选择maximm paidLeave?在这种情况下:

 select employeeid, max((case when paidL  = '1' 
                          Then 1
                          when paidL = '0'
                          Then  0
                    end)) as paidLeave 
 from Lea   
 group by employeeid 
 order by employeeid

答案 2 :(得分:0)

CASE语法不正确,应该遵循表单;

CASE
  WHEN <condition> THEN <result>
  ... (multiples of WHEN ... THEN ...)
  ELSE <result>
END [Alias]

就像这样;

CASE
  WHEN [paidL] = '1' THEN 1
  WHEN [paidL] = '0' THEN 0
END [paidLeave]

答案 3 :(得分:0)

首先,为了更好地帮助您应该提供错误。但是,乍一看我会说你的错误是,你没有将employeeid列作为GROUP BY的一部分。此外,我还没有使用CASE语句来解决您可以通过强制转换解决的问题。您可以CAST paidLINTBIT(仅当值为0/1时)。

CAST([paidL] AS INT) paidL
CAST([paidL] AS BIT) paidL