Plsql “D”表示直接销售); 我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助。嗨,博内斯特,我有点怀疑,,,,,当提供适当的索引时,我和你给出的方法似乎给出了相同的时间。我需要知道的是,在执行过程中,

Plsql “D”表示直接销售); 我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助。嗨,博内斯特,我有点怀疑,,,,,当提供适当的索引时,我和你给出的方法似乎给出了相同的时间。我需要知道的是,在执行过程中,,plsql,Plsql,“D”表示直接销售); 我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助。嗨,博内斯特,我有点怀疑,,,,,当提供适当的索引时,我和你给出的方法似乎给出了相同的时间。我需要知道的是,在执行过程中,将行旋转到11g之前的列样式(您提供的样式和我所做的样式)是否有任何差异?您必须检查执行计划以查看我提供的查询正在执行什么。你也可以检查我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助

“D”表示直接销售);
我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助。嗨,博内斯特,我有点怀疑,,,,,当提供适当的索引时,我和你给出的方法似乎给出了相同的时间。我需要知道的是,在执行过程中,将行旋转到11g之前的列样式(您提供的样式和我所做的样式)是否有任何差异?您必须检查执行计划以查看我提供的查询正在执行什么。你也可以检查我给了你三种方法。明白了。。。如果你有一个索引(mch_代码、合同、创建日期、装备和成本),那可能会有所帮助。嗨,博内斯特,我有点怀疑,,,,,当提供适当的索引时,我和你给出的方法似乎给出了相同的时间。我需要知道的是,在执行过程中,将行旋转到11g之前的列样式(您提供的样式和我所做的样式)是否有任何差异?您必须检查执行计划以查看我提供的查询正在执行什么。您还可以检查
CURSOR get_cost_ IS
  SELECT EQUIP, COST
  FROM   EXIPMNT
  WHERE  mch_code = mch_code_
  AND contract = contract_
  AND CRE_DATE BETWEEN TO_DATE('01/01/' || year_, 'DD/MM/YYYY')
  AND TO_DATE('01/01/' || year_, 'DD/MM/YYYY') + INTERVAL '1' YEAR;

BEGIN

FOR rec_ IN get_cost_ LOOP
  IF (rec_. EQUIP = 'M') THEN
     material_ := material_ + nvl(rec_.cost, 0);
  ELSIF (rec_. EQUIP = 'P') THEN
     personal_ := personal_ + nvl(rec_.cost, 0);
  ELSIF (rec_. EQUIP = 'T') THEN
     tool_facility_ := tool_facility_ + nvl(rec_.cost, 0);
  ELSIF (rec_. EQUIP = 'X') THEN
     expense_ := expense_ + nvl(rec_.cost, 0);
  ELSIF (rec_. EQUIP = 'E') THEN
     external_ := external_ + nvl(rec_.cost, 0);
  ELSIF (rec_. EQUIP = 'D') THEN
     direct_sales_ := direct_sales_ + nvl(rec_.cost, 0);
  END IF; 

 NULL;
 END LOOP;

   total_cost_ := material_ + personal_ + tool_facility_ + expense_ + external_     + direct_sales_;
select sum(cost)
from   exipmnt
where  mch_code = mch_code_
and    contract = contract_
and    cre_date >= TO_DATE('01/01/' || year_, 'DD/MM/YYYY')
and    cre_date < TO_DATE('01/01/' || year_, 'DD/MM/YYYY') + INTERVAL '1' YEAR
and    equip in ('M', 'P', 'T', 'X', 'E', 'D');
select equip,
       sum(cost),
       sum(sum(cost)) over () total_cost
from   exipmnt
where  mch_code = mch_code_
and    contract = contract_
and    cre_date >= TO_DATE('01/01/' || year_, 'DD/MM/YYYY')
and    cre_date < TO_DATE('01/01/' || year_, 'DD/MM/YYYY') + INTERVAL '1' YEAR
and    equip in ('M', 'P', 'T', 'X', 'E', 'D')
group by equip;
select sum(case when equip = 'M' then cost end) material_total,
       sum(case when equip = 'P' then cost end) personal_total,
       sum(case when equip = 'T' then cost end) tool_facility_total,
       sum(case when equip = 'X' then cost end) expense_total,
       sum(case when equip = 'E' then cost end) external_total,
       sum(case when equip = 'D' then cost end) direct_sales_total,
       sum(cost) total
from   exipmnt
where  mch_code = mch_code_
and    contract = contract_
and    cre_date >= TO_DATE('01/01/' || year_, 'DD/MM/YYYY')
and    cre_date < TO_DATE('01/01/' || year_, 'DD/MM/YYYY') + INTERVAL '1' YEAR
and    equip in ('M', 'P', 'T', 'X', 'E', 'D');
select material_total,
       personal_total,
       tool_facility_total,
       expense_total,
       external_total,
       direct_sales_total,
       nvl(material_total, 0)
         + nvl(personal_total, 0)
         + nvl(tool_facility_total, 0)
         + nvl(expense_total, 0)
         + nvl(external_total, 0)
         + nvl(direct_sales_total, 0) total
from   (select *
        from   exipmnt
        where  mch_code = mch_code_
        and    contract = contract_
        and    cre_date >= TO_DATE('01/01/' || year_, 'DD/MM/YYYY')
        and    cre_date < TO_DATE('01/01/' || year_, 'DD/MM/YYYY') + INTERVAL '1' YEAR
        and    equip in ('M', 'P', 'T', 'X', 'E', 'D'))
pivot (sum(cost) as total for equip in ('M' as material,
                                        'P' as personal,
                                        'T' as tool_facility,
                                        'X' as expense,
                                        'E' as external,
                                        'D' as direct_sales));