2017-06-05 45 views
2

我是一名初级SQL编码人员,需要一些帮助,帮助我为Oracle的GL事务处理详细信息构建SQL查询。SQL查询 - Oracle GL事务处理详细信息

我已经能够写我的查询,并且我能够成功地将数据放在我喜欢的位置。有一些我想添加到查询,我相信需要一个子查询,但我不知道如何写它。

SELECT CLIENT, 
RESPONSIBILITY, 
SERVICE_LINE, 
STOB, 
PROJECT, 
JE_LINES_NET_ACT_AMOUNT AS "ACTUAL_AMOUNT", 
EFFECTIVE_DATE, 
PERIOD_NAME, 
VENDOR_NAME, 
DISTRIBUTION_SUPPLIER_NAME, 
CASE WHEN JE_LINE_DESCRIPTION='Journal Import Created' THEN 
    AP_DISTRIBUTION_DESCRIPTION ELSE 
    JE_LINE_DESCRIPTION END AS DESCRIPTION, 
CASE WHEN JE_HEADER_NAME LIKE '%Purchase%' THEN 
    INVOICE_NUMBER ELSE 
    JE_HEADER_NAME END AS DOCUMENT_NUMBER 
FROM GL_Detail 
WHERE RESPONSIBILITY BETWEEN '17500' AND '17511' 
    AND EFFECTIVE_DATE BETWEEN '2016/04/01' AND '2017/03/31' 
    AND JE_LINES_NET_ACT_AMOUNT <> 0 

以上是我用于查询的代码示例。目前,我已经为一系列责任中心(或成本中心)提供数据。为了报告目的,我们将这些责任中心分为不同级别的地点和部门。大多数用户希望通过这些汇总的责任编号来提取数据;但是我们的GL交易明细表没有这些列。

我希望能够做到的事情:我希望能够定义一系列责任中心并为他们分配他们可以定义的责任编号。当我在WHERE之后设置参数时,我希望能够将卷起的责任编号设置为参数。

选择后,嵌套的情况下功能会解决这个问题吗?还是有另一个功能我需要使用?

任何帮助将不胜感激。

回答

0

您可以使用PL/SQL脚本为您提供结果。您在陈述之前使用ACCEPT命令。另外请注意,因为我已经转向PL/SQL,所以我在查询结尾添加了分号和正斜杠。

ACCEPT resp_start NUMBER PROMPT 'Enter responsibility start range: ' 
ACCEPT resp_end NUMBER PROMPT 'Enter responsibility end range: ' 

SELECT 
    . . . 
FROM GL_Detail 
WHERE RESPONSIBILITY BETWEEN '&resp_start' AND '&resp_end' 
AND EFFECTIVE_DATE BETWEEN '2016/04/01' AND '2017/03/31' 
AND JE_LINES_NET_ACT_AMOUNT <> 0; 
/

关于替代变量的详细信息,请参阅How do I use variables in Oracle SQL Developer?。我希望这有助于!

0

你没有说明你的列的数据类型,但我看到隐式类型转换的潜在问题。为了避免这种情况,请使用与正在子集的列的类型相匹配的绑定变量。