如何使用计算列来计算同一视图中的另一列

11 浏览
0 Comments

如何使用计算列来计算同一视图中的另一列

希望你能帮助解答这个问题。我使用的是Oracle SQL(SQL Developer)...\n如果我有一个包含以下列的表:\n

    \n

  • ColumnA(数字)
  • \n

  • ColumnB(数字)
  • \n

  • ColumnC(数字)
  • \n

\n在我的视图中,我有:\n

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB作为calccolumn1

\n现在,我想在这一点上使用calccolumn1,但我不能简单地说...\n

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB作为calccolumn1,
calccolumn1 / ColumnC作为calccolumn2

\n我假设我需要一些子查询..但这就是我需要你的帮助的地方...\n我应该如何编写查询,以便在同一查询中使用calccolumn1进行另一个计算?可能是一个If then或一个Case when,但底线是一些派生数字。

0
0 Comments

如何使用计算列来计算同一视图中的另一列

在同一查询级别中引用计算列时,可以使用CROSS APPLY(Oracle 12c)来实现。

示例数据:

CREATE TABLE tab(ColumnA NUMBER(10,2),ColumnB NUMBER(10,2),ColumnC NUMBER(10,2));

INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (2, 10, 2);

INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (3, 15, 6);

INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (7, 14, 3);

COMMIT;

查询:

SELECT

ColumnA,

ColumnB,

sub.calccolumn1,

sub.calccolumn1 / ColumnC AS calccolumn2

FROM tab t

CROSS APPLY (SELECT t.ColumnA + t.ColumnB AS calccolumn1 FROM dual) sub;

DBFiddle Demo

请注意,CROSS APPLY / OUTER APPLY 中的表达式也可用于其他子句:

SELECT

ColumnA,

ColumnB,

sub.calccolumn1,

sub.calccolumn1 / ColumnC AS calccolumn2

FROM tab t

CROSS APPLY (SELECT t.ColumnA + t.ColumnB AS calccolumn1 FROM dual) sub

WHERE sub.calccolumn1 = 12;

-- GROUP BY ...

-- ORDER BY ...;

这种方法可以避免将整个查询包装在外部查询中,或者在多个位置复制/粘贴相同的表达式(对于复杂的表达式,这可能很难维护)。

相关文章: The SQL Language’s Most Missing Feature

0
0 Comments

在Sql Server中,可以使用cross apply来实现这一目的。通过在查询语句中使用cross apply,可以在同一个视图中使用一个已计算的列来计算另一个列。

具体实现方法如下:

Select
  ColumnA,
  ColumnB,
  c.calccolumn1 As calccolumn1,
  c.calccolumn1 / ColumnC As calccolumn2
from t42
cross apply (select (ColumnA + ColumnB) as calccolumn1) as c

在上述代码中,首先选取了ColumnA和ColumnB两个列作为结果集的一部分。然后,通过使用cross apply,创建了一个临时表c,其中包含了一个已计算的列calccolumn1,该列的值是ColumnA和ColumnB的相加结果。最后,通过将calccolumn1除以ColumnC,计算出了另一个列calccolumn2的值。

通过这种方法,我们可以在同一个查询中使用已计算的列来计算其他列的值,从而简化了查询的过程。

0
0 Comments

使用计算列来计算同一视图中的另一列的方法

在某些情况下,我们需要使用一个已经计算出来的列来计算同一视图中的另一列。下面是一种解决方法:

方法一:使用嵌套查询

Select
  ColumnA,
  ColumnB,
  calccolumn1,
  calccolumn1 / ColumnC as calccolumn2
From (
  Select
    ColumnA,
    ColumnB,
    ColumnC,
    ColumnA + ColumnB As calccolumn1
  from t42
);

对于一行值为3,4,5的数据,将得到如下结果:

   COLUMNA    COLUMNB CALCCOLUMN1 CALCCOLUMN2
---------- ---------- ----------- -----------
         3          4           7         1.4

方法二:重复第一个计算,除非这个计算非常耗费资源(比如函数调用)。

Select
  ColumnA,
  ColumnB,
  ColumnA + ColumnB As calccolumn1,
  (ColumnA + ColumnB) / ColumnC As calccolumn2
from t42; 

对于同样的一行数据,将得到相同的结果:

   COLUMNA    COLUMNB CALCCOLUMN1 CALCCOLUMN2
---------- ---------- ----------- -----------
         3          4           7         1.4 

以上就是使用计算列来计算同一视图中的另一列的解决方法。

0