我正在写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'
相关任何有关改进语法以删除错误的帮助都将不胜感激
答案 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
paidL
列INT
或BIT
(仅当值为0/1时)。
CAST([paidL] AS INT) paidL
CAST([paidL] AS BIT) paidL