简体   繁体   English

该列“在选择列表中无效,因为它既不在聚合函数中也不在GROUP BY子句中”

[英]Column is “invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause”

I have an INV_MASTER table which stores the list of items in the inventory each day, and an ITEM_MASTER table which has the list of items and its details (eg. department, sub-department, class, sub-class, etc.). 我有一个INV_MASTER表,该表每天存储库存中的项目列表,还有一个ITEM_MASTER表,其中包含项目列表及其详细信息(例如,部门,子部门,类,子类等)。

I am trying to write a query to fetch the list of items(INV_MASTER) in the inventory from the date range, arranged in ascending order according to the item's category(ITEM_MASTER). 我正在尝试编写一个查询,以从日期范围中获取清单中的物品清单(INV_MASTER),并根据物品的类别(ITEM_MASTER)以升序排列。 Here is my query its throwing exception. 这是我的查询的抛出异常。

SELECT
INV_MASTER.LOC_CODE,
INV_MASTER.INV_DATE,
INV_MASTER.ITEM_CODE,
INV_MASTER.ITEM_DESC,
INV_MASTER.UNIT_DESC,
FIRST(INV_MASTER.BEG_QTY),
SUM(INV_MASTER.SOLD_QTY),    
SUM(INV_MASTER.REC_QTY),
SUM(INV_MASTER.RET_QTY),
SUM(INV_MASTER.ADJ_QTY),
SUM(INV_MASTER.COUNT_P),
SUM(INV_MASTER.COUNT_C),
SUM(INV_MASTER.TRANS_IN),
SUM(INV_MASTER.TRANS_OUT),
LAST(INV_MASTER.END_QTY),
ITEM_MASTER.*
FROM INV_MASTER
LEFT OUTER JOIN ITEM_MASTER ON INV_MASTER.ITEM_CODE=ITEM_MASTER.ITEM_CODE 
WHERE ITEM_MASTER.DEPARTMENT = '$department' AND ITEM_MASTER.SUB_DEPARTMENT = '$subdepartment' AND ITEM_MASTER.CLASS = '$class' AND ITEM_MASTER.SUB_CLASS = '$subclass' AND INV_MASTER.INV_DATE BETWEEN '$from' AND '$to'
GROUP BY INV_MASTER.LOC_CODE, INV_MASTER.ITEM_CODE 
ORDER BY ITEM_MASTER.$type_desc, INV_MASTER.INV_DATE, ITEM_MASTER.ITEM_CODE

Here's my code for printing: 这是我的打印代码:

while($row = ibase_fetch_assoc($sql))
{
    $inv_date = $row['INV_DATE'];
    $item_code = $row['ITEM_CODE'];
    $item_desc = $row['ITEM_DESC'];
    $unit_desc = $row['UNIT_DESC'];
    $sold_qty = $row['SUM(SOLD_QTY)'];
    $beg_qty = $row['FIRST(BEG_QTY)'];
    $rec_qty = $row['SUM(REC_QTY)'];
    $ret_qty = $row['SUM(RET_QTY)'];
    $adj_qty = $row['SUM(ADJ_QTY)'];
    $count_p_qty = $row['SUM(COUNT_P)'];
    $count_c_qty = $row['SUM(COUNT_C)'];
    $trans_in_qty = $row['SUM(TRANS_IN)'];  
    $trans_out_qty = $row['SUM(TRANS_OUT)'];
    $end_qty = $row['LAST(END_QTY)'];

    *printing part here*
}

The error messages says it: All columns in the SELECT clause must be either aggregate functions (eg SUM , FIRST ) or in the GROUP BY clause. 错误消息说明了这一点: SELECT子句中的所有列都必须是集合函数(例如SUMFIRST )或GROUP BY子句中的。

You have 你有

INV_MASTER.LOC_CODE, INV_MASTER.ITEM_CODE

in the GROUP BY clause, but you SELECT GROUP BY子句中,但是您选择

INV_MASTER.LOC_CODE,
INV_MASTER.INV_DATE,
INV_MASTER.ITEM_CODE,
INV_MASTER.ITEM_DESC,
INV_MASTER.UNIT_DESC,
ITEM_MASTER.*

without any aggregate function. 没有任何汇总功能。 Either

  • Remove the non-aggregated columns you don't need from the SELECT clause or SELECT子句中删除不需要的非聚合列,或者
  • Extend the GROUP BY clause by these columns 通过这些列扩展GROUP BY子句

As far as I can tell from your PHP code, you only need the non-aggregated columns 据我从您的PHP代码可以看出,您只需要未聚合的列

INV_DATE, ITEM_CODE, ITEM_DESC, UNIT_DESC

in the SELECT part. SELECT部分。 So remove the rest and make sure that the GROUP BY contains all these four columns. 因此,删除其余部分,并确保GROUP BY包含所有这四个列。

Edit: Based on the SqlFiddle input 编辑:基于SqlFiddle输入

The SQL Fiddle data is not really complete, and the request looks very different than in the first question (where you had far more items in the WHERE clause), but I managed to get a running statement. SQL Fiddle数据并没有真正完成,并且请求看起来与第一个问题(在WHERE子句中有更多项目)中的请求截然不同,但是我设法获得了一条正在运行的语句。

SELECT
ITEM_MASTER.ITEM_CODE,
ITEM_MASTER.ITEM_DESC,
ITEM_MASTER.UNIT_DESC,
ITEM_MASTER.CLASS,
MIN(INV_MASTER.BEG_QTY),
SUM(INV_MASTER.SOLD_QTY),    
SUM(INV_MASTER.REC_QTY),
SUM(INV_MASTER.RET_QTY),
SUM(INV_MASTER.ADJ_QTY),
SUM(INV_MASTER.COUNT_P),
SUM(INV_MASTER.COUNT_C),
SUM(INV_MASTER.TRANS_IN),
SUM(INV_MASTER.TRANS_OUT),
MAX(INV_MASTER.END_QTY)
FROM INV_MASTER
LEFT OUTER JOIN ITEM_MASTER ON INV_MASTER.ITEM_CODE=ITEM_MASTER.ITEM_CODE 
WHERE INV_MASTER.INV_DATE BETWEEN '2015-10-27' AND '2015-10-31'
GROUP BY ITEM_MASTER.ITEM_CODE, ITEM_MASTER.ITEM_DESC, ITEM_MASTER.UNIT_DESC, ITEM_MASTER.CLASS
ORDER BY ITEM_MASTER.ITEM_CODE, INV_MASTER.INV_DATE, ITEM_MASTER.ITEM_CODE

I hope this is more or less what you want, I think it'll be easy to adapt anyway. 我希望这或多或少是您想要的,无论如何我都会觉得很容易适应。 As your inserted data in SQLFiddle did not include all fields, I couldn't really get the same results as you wish. 由于您在SQLFiddle中插入的数据未包含所有字段,因此我无法真正获得所需的结果。

Keep in mind, MySQL does not know the functions FIRST and LAST , therefore I have changed them to MIN and MAX, not sure, if that's ok, though. 请记住,MySQL 知道的功能FIRSTLAST ,所以我让他们改变MIN和MAX,不知道,如果这是好的,但。

from the tables and sample data here http://www.sqlfiddle.com/#!9/b823f the output should look something like this when i query dates from '2015-10-27' to '2015-10-31' . 从表和此处的示例数据http://www.sqlfiddle.com/#!9/b823f中 ,当我查询从'2015-10-27''2015-10-31'日期时,输出应类似于以下内容。 it should also be group according to its item's department (eg. metal, painting..) 还应根据其项目的部门进行分组(例如,金属,油漆..)

ITEM_CODE      | ITEM_DESC                              | UNIT_DESC | CLASS | BEG  | + | - | - | - | + | + | + | + | - | - | END
METAL  
000000000MS016 | MS RHS 50 X 150 X 3MM X 6M             | LENGTH    | NONE  | 12.5 |20 |25 | 0 | 0 | 0 | 0 | 0 |30 | 0 | 5 | 32.5
PAINTING
000000000PN044 | DURAPATCH BODYFILLER W/ CREAM HARDENER | GALLON/S  | NONE  | 0    |70 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |   65
NONE 
000000000VI064 | TURQOUISE STICKER 3630-236             | SQR FT    | NONE  | 440  | 5 | 0 |10 | 0 |10 | 0 | 0 | 0 | 8 | 0 |  437
ART
000000000VI029 | 3M PLUM PURPLE 3630-128                | SQR FT    | NONE  | 274  |35 |10 | 0 |25 | 0 | 0 | 6 | 0 | 3 | 4 |  273

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 [SQL Server]列“retailers.id”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中 - [SQL Server]Column 'retailers.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause Laravel 5列既不包含在聚合函数中,也不包含在GROUP BY中 - Laravel 5 Column it is not contained in either an aggregate function or the GROUP BY 选择列表不在 group by 子句中并且包含非聚合列 laravel - select list is not in group by clause and contains nonaggregated column laravel SELECT列表不在GROUP BY子句中错误mysql - SELECT list is not in GROUP BY clause ERROR MySQL SELECT 列表的表达式 #1 不在 GROUP BY 子句中并且包含非聚合列。 仅在共享主机 cPanel 中出错 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column. Getting error only in Shared Hosting cPanel have 子句中的未知聚合列 - Unknown aggregate column in having clause 如何在 MySQL 5.7 中调试此“SELECT 列表不在 GROUP BY 子句中”错误? - How to debug this 'SELECT list is not in GROUP BY clause' error in MySQL 5.7? MySQL 5.0.12-列表不在GROUP BY子句中并且包含未聚合的列? - MySQL 5.0.12 - list is not in GROUP BY clause and contains nonaggregated column? 如何在列中列出mysql聚合函数的项目 - how to list items of a mysql aggregate function within the column SqlClient.SqlException:找不到列“ dbo”或用户定义的函数或聚合“ dbo.fn_rt_getlevel”,或者名称不明确 - SqlClient.SqlException: Cannot find either column “dbo” or the user-defined function or aggregate “dbo.fn_rt_getlevel”, or the name is ambiguous
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM