如何GROUP BY别名

时间:2017-10-24 00:00:20

标签: sql-server

我试图找到我们的每个员工计划教授的课程数量,我已经计算了他们的职员ID在计划表中出现的次数,如果我只使用员工的话,那就完美了#39 ; s名字,但无论出于什么原因,当我尝试连接他们的名字和姓氏时,它不起作用,并按指定的别名分组。我做错了什么?

SELECT DISTINCT sf.StfFirstName  + ' ' + sf.StfLastname As StaffName, COUNT(fc.StaffID) 
FROM Staff sf
JOIN Faculty_Classes fc
ON sf.StaffID = fc.StaffID
join Classes cl
ON fc.ClassID = cl.ClassID
GROUP BY Sf.StaffName

2 个答案:

答案 0 :(得分:3)

只需重复select子句中使用的逻辑。它可能看起来效率低下但不是。注意:如果粘贴到group by子句中,则省略给予该逻辑的别名。

SELECT sf.StfFirstName  + ' ' + sf.StfLastname As StaffName, 
COUNT(fc.StaffID) 
FROM Staff sf
JOIN Faculty_Classes fc
     ON sf.StaffID = fc.StaffID
join Classes cl
     ON fc.ClassID = cl.ClassID
GROUP BY sf.StfFirstName  + ' ' + sf.StfLastname
;

你也可以尝试没有连接,它也应该工作。

GROUP BY sf.StfFirstName, sf.StfLastname

select clause中创建的别名不能被group by clause重用,因为select子句实际上是在group by之后执行的,换句话说,编写sql查询的顺序不是操作的顺序

答案 1 :(得分:0)

您可以重复用户Used_By_Already建议的逻辑,或者如果您愿意,可以使用公用表表达式或派生表:

公用表表达式:

with cte_example -- with name_of_cte as (your query)
as
(
SELECT sf.StfFirstName  + ' ' + sf.StfLastname As StaffName, COUNT(fc.StaffID) 
FROM Staff sf
JOIN Faculty_Classes fc
ON sf.StaffID = fc.StaffID
join Classes cl
ON fc.ClassID = cl.ClassID
)

select *
from cte_example
group by StaffName

派生表:

select *
from
(
SELECT sf.StfFirstName  + ' ' + sf.StfLastname As StaffName, COUNT(fc.StaffID) 
FROM Staff sf
JOIN Faculty_Classes fc
ON sf.StaffID = fc.StaffID
join Classes cl
ON fc.ClassID = cl.ClassID
) t1 --note the table alias
group by StaffName