【问题标题】:How to count a user created field - Orcale SQL如何计算用户创建的字段 - Oracle SQL
【发布时间】:2019-09-27 09:37:56
【问题描述】:

我希望创建一个报告来计算每周记录的作业数量。 我在下面的代码中创建了一个名为“Week_Logged”的字段,但是当我尝试计算该字段时,我收到一条错误消息,提示

SQLSTATE = S0022

[Oracle][ODBC][Ora]ORA-00904:"WEEK_LOGGED": 标识符无效

有没有一种简单的方法可以计算每周产生的工作数量?

select
  TO_CHAR(job.actual_start_date, 'IW') as WEEK_LOGGED,
  count (WEEK_LOGGED)
      FROM
      JOB
      INNER JOIN JOB_ITEM ON JOB.JOB_NUMBER = JOB_ITEM.JOB_NUMBER
      INNER JOIN SOR_ITEM ON JOB_ITEM.SOR_ITEM_CODE = SOR_ITEM.SOR_ITEM_CODE
         WHERE
         SOR_ITEM.SOR_ITEM_CODE = 'RF-002'
GROUP BY
WEEK_LOGGED
ORDER BY
WEEK_LOGGED

【问题讨论】:

  • 可以添加表格描述吗?
  • 您不能通过别名订购/计数/限制。您要么必须按该表达式本身订购,要么选择它作为里面的表格。
  • ...我也想知道,因为这可能会更好地重写使用窗口函数来计数和使用不同但不确定的示例数据和预期结果从问题中丢失...

标签: sql oracle count


【解决方案1】:

您的查询需要看起来更像这样;

SELECT TO_CHAR(actual_start_date, 'IW') week_logged,
       COUNT(*)
  FROM JOB
       INNER JOIN JOB_ITEM ON JOB.JOB_NUMBER = JOB_ITEM.JOB_NUMBER
       INNER JOIN SOR_ITEM ON JOB_ITEM.SOR_ITEM_CODE = SOR_ITEM.SOR_ITEM_CODE
 WHERE SOR_ITEM.SOR_ITEM_CODE = 'RF-002'
GROUP BY TO_CHAR(actual_start_date, 'IW')
ORDER BY week_logged

【讨论】:

  • 谢谢 - 这带回了我想要的数据。
【解决方案2】:

如果将GROUP BY子句修改为

GROUP BY TO_CHAR (job.actual_start_date, 'IW')

并将count 更改为

count (*)

应该没问题。

ORDER BY仍然可以使用week_logged,没问题。

【讨论】:

  • 当我对 COUNT 和 GROUP BY 函数进行了修改时,它会返回一条错误消息,指出我缺少右括号。我查看了括号,看不到任何明显的缺失和(匹配的数量)
  • 请编辑您的初始消息并发布当前代码,以便我们看到它。
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多