【发布时间】:2017-03-06 19:27:17
【问题描述】:
我有一张名为 ITEMMASTER 的表。我还有一个名为 BOMMASTER 的表格(BOM 是物料清单)。每个都有一个字段 ITEMCODE 但没有直接链接。还有一个名为 BOMLINES 的表格。 BOMMASTER 将有 1 到多个 BOMLINES。
我想得到一个结果,显示 ITEMMASTER、等效的 BOMMASTER 和 BOM 中使用的总行数。但是,当我使用聚合 COUNT(tablename.fieldname) 时,它返回错误“SQL 错误代码 -104 选择列表中的无效表达式(不包含在聚合函数或 GROUP BY 子句中。)
我使用的(Firebird)SQL 查询是:
SELECT
ITEMMASTER.ITEMCODE,
BOMLINES.ITEMCODE,
COUNT(BOMLINES.LINECODE)
FROM BOMLINES, ITEMMASTER
WHERE ITEMMASTER.ITEMCODE = BOMLINES.ITEMCODE
GROUP BY BOMLINES.ITEMCODE
我也尝试了 LEFT JOIN,但得到了同样的错误。
我知道以下代码有效:
SELECT
BOMLINES.ITEMCODE,
COUNT(BOMLINES.LINECODE)
FROM BOMLINES BOMLINES
GROUP BY BOMLINES.ITEMCODE
但我想将它链接到 ITEMMASTER 表,这样我就可以在 ITEMMASTER 字段名上添加一个额外的 WHERE 子句。
我想我错过了一些非常基本的东西。
COUNT() 的目的是计算每个 BOM 有多少 BOMLINES。我不在乎 BOMLINES 是什么,只关心有多少。
所以下面的工作:
SELECT
ITEMMASTER.ITEMCODE,
ITEMMASTER.ADDITIONALFIELD_6,
COUNT(BOMLINES.LINECODE)
FROM BOMLINES
JOIN ITEMMASTER ON ITEMMASTER.ITEMCODE = BOMLINES.ITEMCODE
GROUP BY ITEMMASTER.ITEMCODE, ITEMMASTER.ADDITIONALFIELD_6
ORDER BY ITEMMASTER.ITEMCODE, ITEMMASTER.ADDITIONALFIELD_6
所以我需要提及 GROUP BY 部分的 SELECT 中列出的所有字段?这似乎相当麻烦。谢谢BWS
【问题讨论】:
-
Firebird 支持解析功能吧? firebirdsql.org/file/documentation/release_notes/html/en/3_0/… 还要考虑你的显示器。如果要显示特定项目,您要按项目或项目总数查找什么“计数”?模拟一些预期的结果,我认为这将有助于澄清您的问题。
标签: sql count aggregate-functions firebird