2

我有一个包含以下列的表

  • End_date.
  • count_all_transactions.
  • count_timeouts.
  • request_key.

现在我需要计算percentagetimeout两个不同的日期并同时显示它们。我已经建立了我的查询。

我的查询如下:

Select PercentageTimeout ,
  PerTimeout,
  Transaction
From 
(
  select 
    T.COUNT_ALL_TRANSACTIONS as Total,
    T.END_DATE as DT1,
    T.COUNT_TIMEOUTS as Timeouts,
    round (((T.COUNT_TIMEOUTS / T.COUNT_ALL_TRANSACTIONS) * 100)
             ,2) as PercentageTimeout,
    R.INTERFACE_NAME as Transaction
  from rpt_timeout T, dim_request R
  where
    T.REQUEST_KEY = R.REQUEST_KEY
  AND
    T.END_DATE='27 AUG 2012'
) 
left outer join 
(
  select T1.COUNT_ALL_TRANSACTIONS as Total1,
    T1.END_DATE as DT2,
    T1.COUNT_TIMEOUTS as Timeouts1,
    round (((T1.COUNT_TIMEOUTS / T1.COUNT_ALL_TRANSACTIONS) * 100)
             ,2) as PerTimeout,
    R1.INTERFACE_NAME as Transaction1
  from rpt_timeout T1, dim_request R1
  where T1.REQUEST_KEY = R1.REQUEST_KEY
  AND T1.END_DATE='20 AUG 2012'
) on Transaction = Transaction1;

这个查询给了我正确的结果,但我正在努力的是我需要列的名称作为该表中相应的 END_DATE 即:我的输出应该是

27-AUG-2012   20-AUG-2012  Transaction
0.28          0.1          Qpay 
0.09          0.06         Payment
4

1 回答 1

0

为此,您需要使用动态 SQL。由于这是特定于 Oracle 的,这意味着使用 PL/SQL 构造查询,然后使用 EXECUTE IMMEDIATE 语句执行它。

请参阅下面的链接...

http://docs.oracle.com/cd/B10500_01/appdev.920/a96590/adg09dyn.htm

这是一些示例代码;它不完整,甚至可能在语法上不正确(我手边没有 Oracle 服务器,并且有一段时间没有使用 Oracle),只是一个片段,让您了解我在说什么。

DECLARE
  query VARCHAR2(4000);
  date1 VARCHAR2(25);
  date2 VARCHAR2(25);
BEGIN
  date1 := '27-AUG-2012';
  date2 := '20-AUG-2012';
  query := 'Select PercentageTimeout as ' || date1 ||
           ', PerTimeout as ' || date2 ||
           ',   Transaction From  <the rest of your query goes here>';

  EXECUTE IMMEDIATE query;
END;

现在您可能想要创建一个游标而不是动态构造的查询字符串并遍历记录;无论你需要做什么。要点是,如果要在查询中动态指定列别名,则需要动态构造该查询。

于 2012-10-10T20:15:04.200 回答