我有一个包含以下列的表
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
答案 0 :(得分:0)
您需要为此使用动态SQL。由于这是特定于Oracle的,这意味着使用PL / SQL构造查询,然后使用EXECUTE IMMEDIATE语句执行它。
请参阅以下链接...
http://docs.oracle.com/cd/B10500_01/appdev.920/a96590/adg09dyn.htm
这是一些示例代码;它不完整,甚至可能在语法上不正确(我没有Oracle服务器,并且在一段时间内没有与Oracle合作),只是一个片段,让你知道我在说什么。 / p>
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;
现在,您可能希望从动态构造的查询字符串中创建游标并遍历记录;无论你需要做什么。重点是,如果要在查询中动态指定列别名,则需要动态构造该查询。