【问题标题】:OBIEE - Is it possible to have a sub query in SELECT statementOBIEE - 是否可以在 SELECT 语句中有子查询
【发布时间】:2020-03-03 05:51:23
【问题描述】:

当我添加以下行时,我收到一个错误: COUNT(select "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" FROM "Workforce Management - Worker Assignment Real Time" where "Worker"."Person Number" > 1000)

我想要做的是添加一个新列,并为人员编号 > 1000 的员工数量设置一个 COUNT。

====================

SELECT 
   0 s_0,
   "Workforce Management - Worker Assignment Real Time"."Worker"."Employee First Name" s_1,
   "Workforce Management - Worker Assignment Real Time"."Worker"."Person ID" s_2,
   "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" s_3,
   "Workforce Management - Worker Assignment Real Time"."Worker"."Person Start Date" s_4,
   "Workforce Management - Worker Assignment Real Time"."Worker"."Termination Date" s_5,
   DESCRIPTOR_IDOF("Workforce Management - Worker Assignment Real Time"."Worker"."Worker Category") s_6,
   "Workforce Management - Worker Assignment Real Time"."Worker Assignment"."Head Count" s_7,
    COUNT(select "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" FROM "Workforce Management - Worker Assignment Real Time" where "Worker"."Person Number" > 1000) s_8

FROM "Workforce Management - Worker Assignment Real Time"

Over() 的错误

Error generating view. Error getting cursor in GenerateHead
  Error Details
Error Codes: OAMP2OPY:OPR4ONWY:U9IM8TAC:U9IM8TAC:U9IM8TAC:U9IM8TAC:OI2DL65P:OI2DL65P
Odbc driver returned an error (SQLExecDirectW).
State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. (HY000)
State: HY000. Code: 43113. [nQSError: 43113] Message returned from OBIS. (HY000)
State: HY000. Code: 27002. [nQSError: 27002] Near <(>: Syntax error (HY000)
State: HY000. Code: 26012. [nQSError: 26012] . (HY000)
SQL Issued: {call NQSGetQueryColumnInfo('SELECT COUNT(CASE WHEN "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" > 1000 THEN 1 END) OVER() FROM "Workforce Management - Worker Assignment Real Time"')}
SQL Issued: SELECT COUNT(CASE WHEN "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" > 1000 THEN 1 END) OVER() FROM "Workforce Management - Worker Assignment Real Time"

【问题讨论】:

    标签: sql oracle obiee


    【解决方案1】:

    COUNT() 窗口函数与CASE 表达式一起使用:

    COUNT(CASE WHEN "Workforce Management - Worker Assignment Real Time"."Worker"."Person Number" > 1000 THEN 1 END) OVER() s_8
    

    【讨论】:

    • 谢谢,我不得不在最后删除 OVER(),因为它给了我一个错误。此外,这仅在当前行员工的人员​​编号 > 1000 时显示,我可以更改此设置,使其显示在每一行,而不管当前行的人员编号如何?
    • OVER() 是分析函数 COUNT() 语法的一部分:docs.oracle.com/cd/E11882_01/server.112/e41084/… 如果您在代码中按原样使用它应该没问题。消息是什么?
    • OVER() 最后没有错。这是获取所需列的方法。如果您收到错误,则说明您没有正确使用它,或者您问题中的代码不是您的实际代码。查看如何在 Oracle 中使用它的简化演示:dbfiddle.uk/…
    • FROM 子句不应该是:FROM "Workforce Management - Worker Assignment Real Time"."Worker"?
    • 如果 Worker 是一个属性,那么什么是“人员编号”? “人员编号”不是表格/视图中的列吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多