在SQL中创建涉及数学的查询

时间:2013-11-03 14:05:25

标签: sql sql-server

我需要“生成一个查询,以显示最少总工作数的两个分支的分支名称和工作总数。会计师工作的分支决定哪些工作与哪个分支相关联。“

这是我试图回答:

SELECT TOP 2 b.branchName, SUM(j.job_id) 
  FROM branch AS b 
  LEFT OUTER JOIN job AS j
    ON b.branch_id - b.branch_id
 ORDER BY sum(j.job_id);

我收到错误

Msg 4145, Level 15, State 1, Line 129 An expression of non-boolean type specified in a context
where a condition is expected, near 'ORDER'

1 个答案:

答案 0 :(得分:0)

这看起来像是一个家庭作业问题,所以我不会给出一个有效的例子,而是尝试解释当前查询的一些问题。

你得到的错误

Msg 4145, Level 15, State 1, Line 129 An expression of non-boolean type specified 
in a context where a condition is expected, near 'ORDER'

是因为ON子句需要一个计算结果为boolean的表达式。您当前使用的表达式可能会评估为int

LEFT OUTER JOIN job AS j
  ON b.branch_id - b.branch_id   -- i.e  5 - 3 := 2

应该是

LEFT OUTER JOIN job AS j
  ON b.branch_id = b.branch_id   -- i.e. 5 = 3 := false

获取sum() ID没有意义

BranchId | JobId
----------------   
1        | 1     --|
1        | 2       | sum(JobId) is 6 
1        | 3     --|

2        | 2     --|
2        | 3       | sum(JobId) is 9
2        | 4     --|

您最想要的是count()

BranchId | JobId
----------------   
1        | 1     --|
1        | 2       | count(JobId) is 3
1        | 3     --|

2        | 2     --|
2        | 3       | count(JobId) is 3
2        | 4     --|

您缺少group by子句

TOP n只会返回第一个n结果,并且在记录绑定时不会考虑,为此您可以使用WITH TIES子句。