SQL Server:列无效
我必须从表格中提取信息并计算卖家的佣金SQL Server:列无效,sql,sql-server,select,group-by,Sql,Sql Server,Select,Group By,我必须从表格中提取信息并计算卖家的佣金 SELECT s.st_staffno as "Staff Number", s.st_name as "Staff Name", s.st_position as "Job Title", COUNT(r.ren_moveindate) as "Properties Rented", s.st_salary * s.st_commperc/100 as "Commission" FROM dbo.staf
SELECT
s.st_staffno as "Staff Number", s.st_name as "Staff Name",
s.st_position as "Job Title",
COUNT(r.ren_moveindate) as "Properties Rented",
s.st_salary * s.st_commperc/100 as "Commission"
FROM
dbo.staff s
INNER JOIN
dbo.rental r ON (s.st_staffno = r.ren_st_staffno)
WHERE
s.st_commperc != NULL
GROUP BY
s.st_staffno, s.st_name, s.st_position;
但我得到以下错误:
Msg 8120,第16级,状态1,第2行“dbo.staff.st_salary”列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 Msg 8120,第16级,状态1,第2行
列“dbo.staff.st_commperc”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
您有多个错误。我认为你打算:
SELECT s.st_staffno as "Staff Number", s.st_name as "Staff Name",
s.st_position as "Job Title",
COUNT(r.ren_moveindate) as "Properties Rented",
SUM(s.st_salary * s.st_commperc) / 100.0 as "Commission"
FROM dbo.staff s INNER JOIN
dbo.rental r
ON s.st_staffno = r.ren_st_staffno
WHERE s.st_commperc IS NOT NULL
Group BY s.st_staffno, s.st_name, s.st_position;
在消息错误中,您在GROUP BY中没有st_salary和st_commperc,并且在聚合函数中没有,因此您应该在GROUP BY中添加
SELECT s.st_staffno as "Staff Number", s.st_name as "Staff Name", s.st_position as "Job Title",
COUNT(r.ren_moveindate) as "Properties Rented", s.st_salary * s.st_commperc/100 as "Commission"
FROM dbo.staff s
INNER JOIN dbo.rental r
ON (s.st_staffno = r.ren_st_staffno)
WHERE s.st_commperc != NULL
Group BY s.st_staffno, s.st_name, s.st_position,s.st_salary, s.st_commperc;
或者使用aggeìregate函数,例如:sum
SELECT s.st_staffno as "Staff Number", s.st_name as "Staff Name", s.st_position as "Job Title",
COUNT(r.ren_moveindate) as "Properties Rented", sum( s.st_salary * s.st_commperc/100 ) as "Commission"
FROM dbo.staff s
INNER JOIN dbo.rental r
ON (s.st_staffno = r.ren_st_staffno)
WHERE s.st_commperc != NULL
Group BY s.st_staffno, s.st_name, s.st_position;
您必须在s.st_commperc处替换=NULL,其中s.st_commperc不为NULL,并包含聚合函数SUM(),以将总佣金:SUM(s.st_salary*s.st_commperc)/100作为“佣金”错误消息非常清楚。在
s.st_salary*s.st_commperc/100
中使用聚合函数(可能是SUM
),或者也按这些列分组,这取决于您想要的结果Where子句应该是“Where s.st_commperc NOT NULL”@GordonBell good catch