我是一名新手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 :(得分: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?。我希望有所帮助!
答案 1 :(得分:0)
您没有说明列的数据类型,但我发现隐式类型转换存在潜在问题。为避免这种情况,请使用与作为子集的列类型匹配的绑定变量。