0

我正在尝试列出作业类型“N”的图书作业信息,并让出版商的信用代码为“C”。然后,为先前查询输出的每一行添加 po 的总数(从表 pos 购买订单)。您可以使用 group by 仅应用于该计数而不应用于其余查询吗?我必须使用加入吗?到目前为止,我的尝试都没有成功。这些是我正在使用的表:

bookjobs:
+--------+---------+----------+
| job_id | cust_id | jobtype  |
+--------+---------+----------+
publishers:
+---------+------------+------------+
| cust_id | name       | creditcode |
+---------+------------+------------+
pos:
+--------+-------+------------+-----------+
| job_id | po_id | po_date    | vendor_id |
+--------+-------+------------+-----------+

这是我想出的,虽然它是错误的(计数未分组到 job_id):

select b.*, (select count(*) from pos o) as count 
from bookjobs b, publishers p, pos o 
where b.cust_id=p.cust_id 
   and b.job_id=o.job_id 
   and b.jobtype='N' 
   and p.creditcode='C';

我相信我需要将计数按 job_id 分组,而不是查询的其余部分。这是可能的还是我需要使用连接?我尝试了一些连接,但无法正常工作。任何帮助表示赞赏。

4

2 回答 2

0

试试这个 sql

select b.*, (select count(*) from pos where job_id=o.job_id) as count 
from bookjobs b, publishers p, pos o 
where b.cust_id=p.cust_id 
   and b.job_id=o.job_id 
   and b.jobtype='N' 
   and p.creditcode='C';
于 2013-05-30T10:56:12.770 回答
0

根据您的描述,我假设您的原始查询将返回重复的行。您可以通过预先聚合pos表然后将其加入来解决此问题:

select b.*, o.cnt
from bookjobs b join
     publishers p
     on b.cust_id = p.cust_id join
     (select job_id, count(*) as cnt
      from pos o 
      group by job_id
     ) o
     on b.job_id = o.job_id
where b.jobtype = 'N' and p.creditcode = 'C';
于 2013-05-30T13:22:43.367 回答