【问题标题】:SQL Query - Oracle GL Transaction DetailSQL 查询 - Oracle GL 事务详细信息
【发布时间】:2017-06-05 20:49:24
【问题描述】:

我是一名 SQL 编码新手,需要一些帮助来处理我正在为 Oracle 的 GL 事务详细信息构建的 SQL 查询。

我已经能够编写我的查询,并且我能够成功地按照我喜欢的方式放置数据。我想在查询中添加一些内容,我认为这需要子查询,但我不确定如何编写。

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 之后设置参数时,我希望能够将汇总的责任编号设置为参数。

在 select 之后嵌套 case 函数会解决这个问题吗?还是我需要使用其他功能?

任何帮助将不胜感激。

【问题讨论】:

    标签: sql oracle parameters


    【解决方案1】:

    您可以使用 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?。希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      您没有说明列的数据类型,但我发现隐式类型转换存在潜在问题。为避免这种情况,请使用与作为子集的列的类型匹配的绑定变量。

      【讨论】:

        猜你喜欢
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-07
        相关资源
        最近更新 更多