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