Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回多行的子查询_Sql_Oracle_Oracle Agile Plm - Fatal编程技术网

Sql 返回多行的子查询

Sql 返回多行的子查询,sql,oracle,oracle-agile-plm,Sql,Oracle,Oracle Agile Plm,我在下面的查询中得到一个错误。。有人能帮忙解决这个问题吗 select c.CHANGE_NUMBER, (select le.ENTRYVALUE from listentry le where le.ENTRYID = c.CATEGORY)as CATEGORY , ( SELECT last_name || ',' || first_name || '(' || loginid || ')' FROM agileuser

我在下面的查询中得到一个错误。。有人能帮忙解决这个问题吗

select c.CHANGE_NUMBER, 
(select le.ENTRYVALUE from listentry  le
where le.ENTRYID = c.CATEGORY)as CATEGORY ,
(
            SELECT  last_name || ',' || first_name || '(' || loginid || ')'
            FROM agileuser
            WHERE id = c.ORIGINATOR
        ) initiator,(
            SELECT  last_name || ',' || first_name || '(' || loginid || ')'
            FROM agileuser
            WHERE id = c.owner
        ) coordinator, w.state,

(SELECT description
            FROM nodetable
            WHERE id = w.state
        ) workflow_status , TO_CHAR(w.LOCAL_DATE,'DD-MON-YY HH24:MI:SS')local_date,
      (select  
        (trunc(to_date(B.local_date, 'DD-MON-YY HH24:MI:SS') - to_date(w.local_date, 'DD-MON-YY HH24:MI:SS')))as timediff
        FROM WORKFLOW_PROCESS w INNER JOIN WORKFLOW_PROCESS B ON B.order_by = (w.order_by + 1) 
        where w.change_id=B.Change_id and w.change_id=9946301 )--ORDER BY w.order_by ASC 

       from change c, WORKFLOW_PROCESS w 
        where w.change_id = c.id-- order by w.ORDER_BY)
       and c.CHANGE_NUMBER='NPI001084' 
      order by w.ORDER_BY,local_date ASC 
trunc()查询提供多条记录

 select  
     (trunc(to_date(B.local_date, 'DD-MON-YY HH24:MI:SS') - to_date(w.local_date, 'DD-MON-YY HH24:MI:SS')))as timediff
      FROM WORKFLOW_PROCESS w INNER JOIN WORKFLOW_PROCESS B ON B.order_by = (w.order_by + 1) 
      where w.change_id=B.Change_id and w.change_id=9946301 ORDER BY w.order_by ASC 

因此无法执行此主查询。

真是一团糟!您确实应该考虑使用SQL格式化程序,或者如果由于某种原因不能使用,请尝试手动编写代码格式。这是不可读的

无论如何:尽管子查询看起来是解决问题的好方法,但通常-避免它们。其中大部分都可以重写,以便正确地联接相关的表

如果选择在
SELECT
语句中使用它们,则必须确保它们每个都返回一个值

这将返回两行或更多行:

SELECT (TRUNC (
             TO_DATE (b.local_date, 'DD-MON-YY HH24:MI:SS')
           - TO_DATE (w.local_date, 'DD-MON-YY HH24:MI:SS')))
          AS timediff
  FROM workflow_process w
       INNER JOIN workflow_process b ON b.order_by = (w.order_by + 1)
 WHERE     w.change_id = b.change_id
       AND w.change_id = 9946301
如何修复它?我不知道,我没有你的桌子,也不知道你想要什么。简单的选择可能是:

select distinct timediff ...


或者其他一些选项,但是-同样,这取决于我们不知道的东西。

完全未经测试,可能有一些拼写错误,也可能是应该保留的连接,可能是不正确的oracle语法,但是

select c.CHANGE_NUMBER, 
    le.ENTRYVALUE as CATEGORY
    orig.last_name || ',' || orig.first_name || '(' || orig.loginid || ')' as initiator,
    own.last_name || ',' || own.first_name || '(' || own.loginid || ')' as coordinator,
    w.state,
    n.description as workflow_status,
    TO_CHAR(w.LOCAL_DATE,'DD-MON-YY HH24:MI:SS')local_date,
    trunc(to_date(B.local_date, 'DD-MON-YY HH24:MI:SS') - to_date(w.local_date, 'DD-MON-YY HH24:MI:SS')) as timediff
from change c
join WORKFLOW_PROCESS w on w.change_id = c.id
join listentry le on le.ENTRYID = c.CATEGORY
join agileuser as orig on orig.id = c.ORIGINATOR
join agileuser as own on own.id = c.owner
join nodetable as n on n.id = w.state
JOIN WORKFLOW_PROCESS B ON B.order_by = (w.order_by + 1) 
where c.CHANGE_NUMBER='NPI001084' 
order by w.ORDER_BY,local_date ASC 

非常感谢你们两位。我对它完全陌生,并试图弄明白。在添加子查询之前,上面的查询为我提供了预期的结果。这个查询多次打印相同的行,我不能在任何列中使用distinct。有什么建议吗?同一行多次是您问题的根源。只需优化查询以仅选择一个,或者使用row_number()函数选择任何组中的第一个。或者,如果它们在所有这些列中确实是重复的,则使用SELECT DISTINCT。
select ...
where rownum = 1
select c.CHANGE_NUMBER, 
    le.ENTRYVALUE as CATEGORY
    orig.last_name || ',' || orig.first_name || '(' || orig.loginid || ')' as initiator,
    own.last_name || ',' || own.first_name || '(' || own.loginid || ')' as coordinator,
    w.state,
    n.description as workflow_status,
    TO_CHAR(w.LOCAL_DATE,'DD-MON-YY HH24:MI:SS')local_date,
    trunc(to_date(B.local_date, 'DD-MON-YY HH24:MI:SS') - to_date(w.local_date, 'DD-MON-YY HH24:MI:SS')) as timediff
from change c
join WORKFLOW_PROCESS w on w.change_id = c.id
join listentry le on le.ENTRYID = c.CATEGORY
join agileuser as orig on orig.id = c.ORIGINATOR
join agileuser as own on own.id = c.owner
join nodetable as n on n.id = w.state
JOIN WORKFLOW_PROCESS B ON B.order_by = (w.order_by + 1) 
where c.CHANGE_NUMBER='NPI001084' 
order by w.ORDER_BY,local_date ASC