访问 SQL GROUP BY 问题(例如 tbl_Produktion.ID 不是聚合函数的一部分)
Access SQL GROUP BY problem (eg. tbl_Produktion.ID not part of the aggregation-function)
我想按两列分组,但是 MS Access 不允许我这样做。
这是我写的代码:
SELECT
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter,
tbl_Produktion.ProduktionsID, tbl_Produktion.Linie,
tbl_Produktion.Schicht, tbl_Produktion.Anzahl_Schichten_P,
tbl_Produktion.Schichtteam, tbl_Produktion.Von, tbl_Produktion.Bis,
tbl_Produktion.Pause, tbl_Produktion.Kunde, tbl_Produktion.TeileNr,
tbl_Produktion.FormNr, tbl_Produktion.LabyNr,
SUM(tbl_Produktion.Stueckzahl_Prod),
tbl_Produktion.Stueckzahl_Ausschuss, tbl_Produktion.Ausschussgrund,
tbl_Produktion.Kommentar, tbl_Produktion.StvSchichtleiter,
tbl_Produktion.Von2, tbl_Produktion.Bis2, tbl_Produktion.Pause2,
tbl_Produktion.Arbeiter3, tbl_Produktion.Von3, tbl_Produktion.Bis3,
tbl_Produktion.Pause3, tbl_Produktion.Arbeiter4,
tbl_Produktion.Von4, tbl_Produktion.Bis4, tbl_Produktion.Pause4,
tbl_Produktion.Leiharbeiter5, tbl_Produktion.Von5,
tbl_Produktion.Bis5, tbl_Produktion.Pause5,
tbl_Produktion.Leiharbeiter6, tbl_Produktion.Von6,
tbl_Produktion.Bis6, tbl_Produktion.Pause6, tbl_Produktion.Muster
FROM
tbl_Personal
INNER JOIN
tbl_Produktion ON tbl_Personal.PersID = tbl_Produktion.Schichtleiter
GROUP BY
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter;
当我按所有列对其进行分组时它起作用,但不是这样。
错误消息说其余的列不是聚合函数的一部分(尽我所能从德语翻译成英语)。
PS.: 我还需要“tbl_Produktion.Stueckzahl_Prod”的总和,因此我尝试使用 SUM 函数(还不能尝试)。
如果您在 select
子句中使用聚合函数,则必须 group by
您要 select
的每一列都不是聚合。如果您出于某种原因不想这样做(也许它会以您不希望的方式改变聚合的输出),您要么必须考虑要使用的聚合(选择一个值。平均值?最大值?最小值? ) 或者只做两个选择,一个用于聚合,一个用于非聚合。但是,然后,您必须决定如何获取对聚合有意义的非聚合字段(或者我想将它们全部显示在 table 中?)
您是否尝试过类似的方法?
SELECT
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter,
MAX(tbl_Produktion.ProduktionsID), MAX(tbl_Produktion.Linie),
MAX(tbl_Produktion.Schicht), MAX(tbl_Produktion.Anzahl_Schichten_P),
MAX(tbl_Produktion.Schichtteam), MAX(tbl_Produktion.Von), MAX(tbl_Produktion.Bis),
SUM(tbl_Produktion.Stueckzahl_Prod)
FROM
tbl_Personal
INNER JOIN
tbl_Produktion ON tbl_Personal.PersID = tbl_Produktion.Schichtleiter
GROUP BY
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter;
除了您在 GROUP BY 中指定的两项和您需要 SUM 的一项之外,我对所有数据都使用了 MAX 函数。为了开始,我冒昧地省略了您的大量数据。
事实证明,当数据项在每个组中都是唯一的时,使用 MAX 函数是一种方便的解决方法。我们无法知道您的数据或您的 itent,因此我们无法告诉您 MAX 是否会产生您需要的结果。
我想按两列分组,但是 MS Access 不允许我这样做。
这是我写的代码:
SELECT
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter,
tbl_Produktion.ProduktionsID, tbl_Produktion.Linie,
tbl_Produktion.Schicht, tbl_Produktion.Anzahl_Schichten_P,
tbl_Produktion.Schichtteam, tbl_Produktion.Von, tbl_Produktion.Bis,
tbl_Produktion.Pause, tbl_Produktion.Kunde, tbl_Produktion.TeileNr,
tbl_Produktion.FormNr, tbl_Produktion.LabyNr,
SUM(tbl_Produktion.Stueckzahl_Prod),
tbl_Produktion.Stueckzahl_Ausschuss, tbl_Produktion.Ausschussgrund,
tbl_Produktion.Kommentar, tbl_Produktion.StvSchichtleiter,
tbl_Produktion.Von2, tbl_Produktion.Bis2, tbl_Produktion.Pause2,
tbl_Produktion.Arbeiter3, tbl_Produktion.Von3, tbl_Produktion.Bis3,
tbl_Produktion.Pause3, tbl_Produktion.Arbeiter4,
tbl_Produktion.Von4, tbl_Produktion.Bis4, tbl_Produktion.Pause4,
tbl_Produktion.Leiharbeiter5, tbl_Produktion.Von5,
tbl_Produktion.Bis5, tbl_Produktion.Pause5,
tbl_Produktion.Leiharbeiter6, tbl_Produktion.Von6,
tbl_Produktion.Bis6, tbl_Produktion.Pause6, tbl_Produktion.Muster
FROM
tbl_Personal
INNER JOIN
tbl_Produktion ON tbl_Personal.PersID = tbl_Produktion.Schichtleiter
GROUP BY
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter;
当我按所有列对其进行分组时它起作用,但不是这样。
错误消息说其余的列不是聚合函数的一部分(尽我所能从德语翻译成英语)。
PS.: 我还需要“tbl_Produktion.Stueckzahl_Prod”的总和,因此我尝试使用 SUM 函数(还不能尝试)。
如果您在 select
子句中使用聚合函数,则必须 group by
您要 select
的每一列都不是聚合。如果您出于某种原因不想这样做(也许它会以您不希望的方式改变聚合的输出),您要么必须考虑要使用的聚合(选择一个值。平均值?最大值?最小值? ) 或者只做两个选择,一个用于聚合,一个用于非聚合。但是,然后,您必须决定如何获取对聚合有意义的非聚合字段(或者我想将它们全部显示在 table 中?)
您是否尝试过类似的方法?
SELECT
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter,
MAX(tbl_Produktion.ProduktionsID), MAX(tbl_Produktion.Linie),
MAX(tbl_Produktion.Schicht), MAX(tbl_Produktion.Anzahl_Schichten_P),
MAX(tbl_Produktion.Schichtteam), MAX(tbl_Produktion.Von), MAX(tbl_Produktion.Bis),
SUM(tbl_Produktion.Stueckzahl_Prod)
FROM
tbl_Personal
INNER JOIN
tbl_Produktion ON tbl_Personal.PersID = tbl_Produktion.Schichtleiter
GROUP BY
tbl_Produktion.Datum, tbl_Produktion.Schichtleiter;
除了您在 GROUP BY 中指定的两项和您需要 SUM 的一项之外,我对所有数据都使用了 MAX 函数。为了开始,我冒昧地省略了您的大量数据。
事实证明,当数据项在每个组中都是唯一的时,使用 MAX 函数是一种方便的解决方法。我们无法知道您的数据或您的 itent,因此我们无法告诉您 MAX 是否会产生您需要的结果。