Sql server 如何按别名分组
我试图找出我们每个员工计划教授的课程数量,我计算了他们在时间表中出现的次数,如果我只使用员工的名字,它会运行得很好,但无论出于什么原因,当我尝试连接他们的名字和姓氏,并按指定的别名分组时,它都不起作用。我做错了什么Sql server 如何按别名分组,sql-server,Sql Server,我试图找出我们每个员工计划教授的课程数量,我计算了他们在时间表中出现的次数,如果我只使用员工的名字,它会运行得很好,但无论出于什么原因,当我尝试连接他们的名字和姓氏,并按指定的别名分组时,它都不起作用。我做错了什么 SELECT DISTINCT sf.StfFirstName + ' ' + sf.StfLastname As StaffName, COUNT(fc.StaffID) FROM Staff sf JOIN Faculty_Classes fc ON sf.StaffID =
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
只需重复select子句中使用的逻辑。它可能看起来效率低下,但事实并非如此。注意:如果粘贴到GROUPBY子句中,请忽略该逻辑的别名
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子句
中创建的别名不能被group by子句
重用,因为select子句实际上是在group by之后执行的,换句话说,编写sql查询的顺序不是操作顺序。只需重复select子句中使用的逻辑即可。它可能看起来效率低下,但事实并非如此。注意:如果粘贴到GROUPBY子句中,请忽略该逻辑的别名
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子句
中创建的别名不能被groupby子句
重用,因为select子句实际上是在groupby之后执行的,换句话说,编写sql查询的顺序不是操作顺序。您可以按照已经建议的用户使用顺序重复该逻辑,或者您也可以使用公共表表达式或派生表(如果愿意):
通用表表达式:
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
您可以重复用户使用的逻辑,或者您也可以使用公共表表达式或派生表,如果您愿意: 通用表表达式:
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
哦我忘了在已经使用
groupby
的单个查询中提到从不包含selectdistinct
。正如我在下面的回答中提到的,group by在select之前执行,而group by在distinct之前执行。GROUPBY创建唯一的行,因此要求已经唯一的行“不同”纯粹是浪费时间和精力。我忘了在已经使用groupby
的单个查询中提到从不包含selectdistinct
。正如我在下面的回答中提到的,group by在select之前执行,而group by在distinct之前执行。GROUP BY创建唯一的行,因此要求已经唯一的行为“distinct”纯粹是浪费时间和精力。这两个示例都是正确的,但请注意,在两个子查询中都不需要distinct。感谢您指出,我没有跟踪查询。这两个示例都是正确的,但请注意,这两个子查询中都不需要distinct。感谢您指出,我没有跟踪查询。