oracle在sql中使用groupby语句时的问题

bfrts1fy  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(386)

我无法按所有值相同但有两行的表分组。我不明白这背后的原因是什么。
运行完这个查询后,我得到了下面的表,我想把表按批号分组。

  1. SELECT
  2. c.LOT_NO LOT_NO
  3. , (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) NON_ZERO_QTY
  4. , count(c.lot_no) over () as LOT_COUNT
  5. FROM
  6. CIM.QLDT_6001 a
  7. , CIM.PART_LOT_TBL b
  8. , CIM.JR_QTY_DETAIL_TBL c
  9. WHERE
  10. c.lot_no = 'F-AJR-111026-603'
  11. AND
  12. a.val01 >= 100
  13. AND
  14. b.lot_no = c.lot_no
  15. AND
  16. a.lot_no like '%' || b.old_lot_no || '%'

表格:

  1. LOT_NO NON_ZERO_QTY LOT_COUNT
  2. F-AJR-111026-603 3 2
  3. F-AJR-111026-603 3 2

现在当我试着用抽签来分组时,我得到了下面的错误。

  1. ORA-00918: column ambiguously defined
  2. 00918. 00000 - "column ambiguously defined"
  3. * Cause:
  4. * Action:
  5. Error at Line: 19 Column: 10

我还尝试从select语句中获取所有列,但出现了以下错误

  1. ORA-00904: "LOT_COUNT": invalid identifier
  2. 00904. 00000 - "%s: invalid identifier"
  3. * Cause:
  4. * Action:
  5. Error at Line: 19 Column: 34

我完全搞不清楚发生了什么事。有人能帮忙吗。

rqcrx0a6

rqcrx0a61#

您的查询中存在多个问题。 group by c.lot_no 是必需的
中的第二个表达式 SELECT 一定要包在里面 SUM 聚合函数(更改的表达式 CASE 报表(按要求)
始终使用标准ansi连接((推荐)
检查以下解决方案:

  1. SELECT
  2. c.LOT_NO LOT_NO
  3. , SUM(CASE WHEN (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) > 0
  4. THEN 1 ELSE 0 END) NON_ZERO_QTY
  5. , count(c.lot_no) as LOT_COUNT
  6. FROM
  7. CIM.QLDT_6001 a
  8. JOIN CIM.PART_LOT_TBL b ON a.lot_no like '%' || b.old_lot_no || '%'
  9. JOIN CIM.JR_QTY_DETAIL_TBL c ON b.lot_no = c.lot_no
  10. WHERE
  11. c.lot_no = 'F-AJR-111026-603'
  12. AND a.val01 >= 100
  13. GROUP BY c.LOT_NO
展开查看全部
izkcnapc

izkcnapc2#

据我所知,你不能 Group ByLOT_No 或者 LOT_COUNT 并获取标识符错误。这可能是因为没有对列使用正确的引用。相反,请尝试将查询的特定表引用用作:

  1. SELECT
  2. c.LOT_NO LOT_NO
  3. , (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) NON_ZERO_QTY
  4. , count(c.lot_no) over () as LOT_COUNT
  5. FROM
  6. CIM.QLDT_6001 a
  7. , CIM.PART_LOT_TBL b
  8. , CIM.JR_QTY_DETAIL_TBL c
  9. GROUP BY c.LOT_NO;

另请参阅:https://www.techonthenet.com/oracle/errors/ora00904.php 而且,http://www.dba-oracle.com/t_ora_00918_column_ambiguously_defined.htm
更新:
确保您正在对select语句中选定的列进行分组。
出错后:

  1. SELECT
  2. c.LOT_NO LOT_NO
  3. , MAX(4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) NON_ZERO_QTY
  4. , count(c.lot_no) over () as LOT_COUNT
  5. FROM
  6. CIM.QLDT_6001 a
  7. , CIM.PART_LOT_TBL b
  8. , CIM.JR_QTY_DETAIL_TBL c
  9. GROUP BY c.LOT_NO;

请注意中使用的max函数 NON_ZERO_QTY 声明。您可以根据您的要求使用任何其他此类功能。它可以是sum()、min()、avg()等。

展开查看全部
jogvjijk

jogvjijk3#

你的错误

  1. ORA-00918: column ambiguously defined

表示在查询的多个表中找到要按其分组的列。您需要做的是在它前面加上正确表的别名。

  1. group by c.LOT_NO

但这会给你另一个错误

  1. ORA-00979: not a GROUP BY expression

因为select子句中的第二行没有group函数。乍一看,您正在查找sum()。但这取决于你们的用例。

  1. (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) NON_ZERO_QTY

例子:

  1. SUM( (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0)))) NON_ZERO_QTY
展开查看全部

相关问题