我试图找到我们的每个员工计划教授的课程数量,我已经计算了他们的职员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
答案 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