Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle-可以在求和函数中使用别名吗?_Sql_Oracle_Sum - Fatal编程技术网

Sql Oracle-可以在求和函数中使用别名吗?

Sql Oracle-可以在求和函数中使用别名吗?,sql,oracle,sum,Sql,Oracle,Sum,我希望能够从ttl_exist col中减去ttl_new col,当我使用动态名称时,我会得到一个错误,但是如果只是将两个和函数的全部内容粘贴到第三个和函数中,它就会工作。所以我只是想知道这是否可能,它肯定会更容易阅读 这适用于Oracle 8i大多数数据库的作用域规则不允许在同一SELECT语句中使用别名。可以使用子查询执行此操作: SELECT c.customer_name, sc.customer_id, SUM( (nv

我希望能够从ttl_exist col中减去ttl_new col,当我使用动态名称时,我会得到一个错误,但是如果只是将两个和函数的全部内容粘贴到第三个和函数中,它就会工作。所以我只是想知道这是否可能,它肯定会更容易阅读


这适用于Oracle 8i

大多数数据库的作用域规则不允许在同一SELECT语句中使用别名。可以使用子查询执行此操作:

SELECT c.customer_name,
        sc.customer_id,
        SUM(
                (nvl(sc.year_1_new, 0) + nvl(sc.year_2_new, 0) + nvl(sc.year_3_new, 0) + 
                nvl(sc.year_4_new, 0) + nvl(sc.year_5_new, 0)) * sc.suggested_net
            ) AS ttl_new,
        SUM(
                (nvl(sc.year_1_nl, 0) + nvl(sc.year_2_nl, 0) + nvl(sc.year_3_nl, 0) + 
                nvl(sc.year_4_nl, 0) + nvl(sc.year_5_nl, 0)) * sc.suggested_net
            ) AS ttl_exist,
        SUM(ttl_new - ttl_exist) AS ttl_delta
FROM scenario_customers sc,
        customers c
WHERE sc.scenario_id = 10
        AND sc.customer_id = c.customer_id
GROUP BY sc.customer_id,
        c.customer_name
ORDER BY c.customer_name

我还修复了您的连接语法

大多数数据库的作用域规则不允许在同一SELECT语句中使用别名。可以使用子查询执行此操作:

SELECT c.customer_name,
        sc.customer_id,
        SUM(
                (nvl(sc.year_1_new, 0) + nvl(sc.year_2_new, 0) + nvl(sc.year_3_new, 0) + 
                nvl(sc.year_4_new, 0) + nvl(sc.year_5_new, 0)) * sc.suggested_net
            ) AS ttl_new,
        SUM(
                (nvl(sc.year_1_nl, 0) + nvl(sc.year_2_nl, 0) + nvl(sc.year_3_nl, 0) + 
                nvl(sc.year_4_nl, 0) + nvl(sc.year_5_nl, 0)) * sc.suggested_net
            ) AS ttl_exist,
        SUM(ttl_new - ttl_exist) AS ttl_delta
FROM scenario_customers sc,
        customers c
WHERE sc.scenario_id = 10
        AND sc.customer_id = c.customer_id
GROUP BY sc.customer_id,
        c.customer_name
ORDER BY c.customer_name

我还修复了您的连接语法

在SQL中,整个select子句在逻辑上同时求值。查询优化器必须选择一个特定的顺序来进行计算,但结果必须如同所有列都已同时计算一样。因此,任何一列的输入都不会出现在任何其他列中。经过仔细考虑,我认为这个问题与链接的问题并不完全相同。解决方案是相同的,使用内联视图,但原因不同。不同子句的逻辑顺序,而不是
select
子句中的逻辑顺序。在SQL中,整个select子句在逻辑上同时求值。查询优化器必须选择一个特定的顺序来进行计算,但结果必须如同所有列都已同时计算一样。因此,任何一列的输入都不会出现在任何其他列中。经过仔细考虑,我认为这个问题与链接的问题并不完全相同。解决方案是相同的,使用内联视图,但原因不同。不同子句的逻辑顺序,而不是
select
子句中的逻辑顺序。