SQL Embedded Select使用SUM,略有限制

时间:2011-06-27 16:59:14

标签: sql sybase

我有一个有点奇怪的问题,我一直在反对,我想知道是否有人会有任何想法。更困难的是,它必须在嵌入式产品的受限环境中工作,我只能在连接后更改查询。

我在两个表之间有一个连接来形成完整的行,每一行都有一个模块ID和一个工作列,对于未工作和0表示工作。每行还有一个配额列,它引用模块ID,所有具有相同模块ID的行具有相同的配额值。

所以例如数据是

ID |Module | Quota | Complete
-------------------------
1  |A      | 1     | 0
2  |B      | 2     | 1
3  |A      | 1     | 0
4  |A      | 1     | 0
5  |B      | 2     | 1
6  |C      | 4     | 0

我想选择模块的完整列的总和小于该模块的配额的记录。

我必须去的地方:

Select table_a.quota, table_a.module, table_b.complete
from table_a inner join table_b on table_a.id = table_b.id
having table_a.quota > (select sum(table_b.complete) from table_a inner join table_b on table_a.id = table_b.id where table_a.module = *module*)

由于我只能影响having子句之后的任何内容,我不知道如何从嵌入式语句( module )中的原始查询行引用模块值,任何想法?

提前感谢任何有帮助的人!

1 个答案:

答案 0 :(得分:0)

首先请注意,据我所知,你想使用WHERE而不是HAVING;你没有GROUP BY。

  • 在所有联接完成后但在任何聚合完成之前应用WHERE。
  • 在任何聚合之后应用。

在引用外部查询方面,在相关子查询中,您需要使用别名......

SELECT
  table_a.quota,
  table_a.module,
  table_b.complete
FROM
  table_a
INNER JOIN
  table_b
    ON table_a.id = table_b.id
WHERE
  table_a.quota
  >
  (
    SELECT
      SUM(lookup_b.complete)
    FROM
      table_a AS lookup_a
    INNER JOIN
      table_b AS lookup_b
        ON lookup_a.id = lookup_b.id
    WHERE
      lookup_a.module = table_a.module
  )