Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Join_Oracle11g_Parameter Passing - Fatal编程技术网

Sql 将参数传递给联接

Sql 将参数传递给联接,sql,oracle,join,oracle11g,parameter-passing,Sql,Oracle,Join,Oracle11g,Parameter Passing,我需要创建一个用于生成报告的视图。该视图将获取一个用户表,并根据用户ID和订单ID将其与一个订单表和一个工作流表连接起来。由于我需要根据两个不同的订单状态多次连接订单表,因此该视图非常复杂 我需要能够获得每个用户打开状态的订单数量计数,状态为“已退回”、“保留”或“已退回-故障”的订单数量计数,以及每个用户在每个地区的订单数量计数 把所有的数据放在一起是很好的,我刚刚设置了一个简单的select,为每个计数要求建立了一个连接,如下所示。我的问题是,这将返回表中所有记录的计数,并且我需要能够将其限

我需要创建一个用于生成报告的视图。该视图将获取一个用户表,并根据用户ID和订单ID将其与一个订单表和一个工作流表连接起来。由于我需要根据两个不同的订单状态多次连接订单表,因此该视图非常复杂

我需要能够获得每个用户打开状态的订单数量计数,状态为“已退回”、“保留”或“已退回-故障”的订单数量计数,以及每个用户在每个地区的订单数量计数

把所有的数据放在一起是很好的,我刚刚设置了一个简单的select,为每个计数要求建立了一个连接,如下所示。我的问题是,这将返回表中所有记录的计数,并且我需要能够将其限制为将参数化的特定时间内的订单

我需要一些帮助来获得连接的时间限制

select u.FIRST_NAME || ' ' || u.LAST_NAME as ASSIGNED_TO,
u.ID,
j4.TOTAL_AREA1,
j1.total,
j2.TOTAL_OPENED,
j3.TOTAL_RETURNED

from users u
left outer join
(      
 select u1.FIRST_NAME || ' ' || u1.LAST_NAME as ASSIGNED_TO,
        u1.ID,
        COUNT(o1.ORDER_KEY) as total
 from users u1,
  orders o1,
  WORKFLOW_WORKITEM ww1    

 where
        o1.ORDER_KEY = ww1.ENTITY_KEY_NUM
        AND ww1.ENTITY_NAME = 'Order'
        AND ww1.ASSIGNED_TO = U1.ID

 GROUP BY u1.FIRST_NAME,
        u1.LAST_NAME,
        u1.id) j1
on 
j1.ID = u.ID


left outer join 
(      
 select u1.FIRST_NAME || ' ' || u1.LAST_NAME as ASSIGNED_TO,
        u1.ID,
        COUNT(o1.ORDER_KEY) as TOTAL_OPENED
 from users u1,
      ORDERS o1,
      WORKFLOW_WORKITEM ww1    

 where
        o1.CASE_KEY = ww1.ENTITY_KEY_NUM
        AND ww1.ENTITY_NAME = 'Order'
        AND ww1.ASSIGNED_TO = U1.ID
        AND ww1.STATUS_CODE='S_ORD_CA_021'

 GROUP BY u1.FIRST_NAME,
        u1.LAST_NAME,
        u1.id) j2
on 
j2.ID = u.ID
left outer join 
(      
 select u1.FIRST_NAME || ' ' || u1.LAST_NAME as ASSIGNED_TO,
        u1.ID,
        COUNT(o1.ORDER_KEY) as TOTAL_RETURNED
 from users u1,
      ORDERS o1,

      WORKFLOW_WORKITEM ww1    

 where
        o1.ORDER_KEY = ww1.ENTITY_KEY_NUM
        AND ww1.ENTITY_NAME = 'Order'
        AND ww1.ASSIGNED_TO = U1.ID
        AND ww1.STATUS_CODE in ('S_ORD_CA_015', 'S_ORD_CA_016', 'S_ORD_CA_017','S_ORD_CA_018')

 GROUP BY u1.FIRST_NAME,
        u1.LAST_NAME,
        u1.id) j3
on 
j3.ID = u.ID


left outer join
(
select  
        u1.ID,
        COUNT(o1.ORDER_KEY) as TOTAL_AREA1

from    users u1,
        ORDERS o1,
        WORKFLOW_WORKITEM ww1,
        domains dm  

where
        o1.ORDER_KEY = ww1.ENTITY_KEY_NUM
        AND ww1.ENTITY_NAME = 'Order'
        AND ww1.ASSIGNED_TO = U1.ID
        and ww1.DOMAIN_ID=dm.ID
    AND dm.CODE='AREA1'

GROUP BY 
        u1.FIRST_NAME,
        u1.LAST_NAME,
        u1.id,
        ww1.DOMAIN_ID,
        dm.DESCRIPTION
       ) j4
on 
j4.ID = u.ID

基本上,您希望添加以下内容:

o1.DATE between :param_from and :param_to
在每个“订单”子查询中<代码>:符号是oracle参数的标准,但参数的绑定方式取决于执行查询所使用的环境。因此,请写下您使用的环境/工具

您可以尝试简化查询(我希望我没有犯任何语法错误,我是在记事本中写的…):


非常感谢您的回复。我正在使用dbvisualizer执行sql。我明白你的意思了,好吧,我明天回到办公室后会对此进行破解,并进行后续更新。在这个网站的变量部分,你可以找到关于如何在dbvisualizer中绑定参数的描述:它说你应该使用
${notation}$
,所以您的参数行应该是这样的:
o1.DATE介于to_DATE(${param_from}$,'YYYY-MM-DD')和to_DATE(${param_to}$,'yyyyy-MM-DD')
(我建议使用
to_DATE
函数,这样您就可以明确指定日期格式)。
select 
    ASSIGNED_USER, 
    UID, 
    count(AREA1) TOTAL_AREA1, 
    count(1) TOTAL,
    count(OPENED) TOTAL_OPENED,
    count (RETURNED) TOTAL_RETURNED
from
    (
    select 
        u1.id UID,
        u1.FIRST_NAME || ' ' || u1.LAST_NAME as ASSIGNED_USER,
        case when dm.CODE='AREA1' then 1 else null end AREA1,
        case when ww1.STATUS_CODE='S_ORD_CA_021' then 1 else null end OPENED,
        case when ww1.STATUS_CODE in 
          ('S_ORD_CA_015', 'S_ORD_CA_016', 'S_ORD_CA_017','S_ORD_CA_018') then 1
            else null end RETURNED
    from users u1
        left outer join WORKFLOW_WORKITEM ww1 on AND ww1.ASSIGNED_TO = U1.ID
            AND ww1.ENTITY_NAME = 'Order'
        left outer join orders o1 on o1.ORDER_KEY = ww1.ENTITY_KEY_NUM
        left outer join domains dm on ww1.DOMAIN_ID=dm.ID
    where 
        o1.DATE between :param_from and :param_to
        -- you can add any other conditions that may 
        -- cut number of selected records
        -- to minimum required to get expected results
    )
group by UID, ASSIGNED_USER;