【问题标题】:Can I reference on an alias in Oracle?我可以在 Oracle 中引用别名吗?
【发布时间】:2021-10-26 11:50:14
【问题描述】:

我有一个这样的查询:

SELECT
ARUTORZS.ARUKOD,
ARUTORZS.ARUNEV,
(SELECT SUM(MENNYISEG)
  FROM ((((STOREIS.KESZLET
  LEFT OUTER JOIN STOREIS.THELY ON
  THELY.TH=KESZLET.TH)
  LEFT OUTER JOIN STOREIS.ZONA ON
  ZONA.ZONAKOD=THELY.ZONA)
  LEFT OUTER JOIN STOREIS.ARUTELEP ON
  ARUTELEP.TH_KOD='P' AND
  ARUTELEP.ARUKOD=KESZLET.ARUKOD)
  LEFT OUTER JOIN STOREIS.RAKTAR ON
  RAKTAR.RAKTAR=KESZLET.RKOD)
  WHERE KESZLET.ARUKOD=ARUTORZS.ARUKOD ) AS keszlet,
ARUTELEP.RKOD,
ARUTELEP.ZONA_KOMISSIOS,
ARUTORZS.GYARTO_KOD,
UGYFEL.ORACLE_KOD,
UGYFEL.SZAML_NEV,
ARUTORZS.SULY,
**ARUTORZS.SULY*keszlet/1000 AS SULYKG,**
ARUTORZS.REL_LEJ,
ARUTORZS.GYUJTO,
ARUTORZS.RAKLAP_MENNY
FROM ((STOREIS.ARUTORZS
LEFT OUTER JOIN STOREIS.ARUTELEP ON
ARUTELEP.TH_KOD='P' AND
ARUTELEP.ARUKOD=ARUTORZS.ARUKOD)
LEFT OUTER JOIN STOREIS.UGYFEL ON
UGYFEL.UGYF_KOD=ARUTORZS.GYARTO_KOD)
WHERE ARUTELEP.RKOD>=100 AND ARUTELEP.RKOD<=199

keszlet 子查询有效,但我无法在另一列中引用其结果。如何参考 keszlet 子查询的结果?我想在另一列中相乘。

【问题讨论】:

  • 将 qeury 包装为 派生表

标签: sql oracle subquery alias


【解决方案1】:

您可以使用子查询的结果,但您必须将其用作表子查询。

说明

对于表子查询,外部查询处理 子查询作为表。您只能在 FROM 子句中使用这些。

因此,您的子查询位于 FROM 子句之后,您可以像这样进行新连接:

SELECT your_result_value * --do what you want...

FROM 

(SELECT SUM(MENNYISEG) as YOUR_RESULT_VALUE, PK --your_primary_key
  FROM ((((STOREIS.KESZLET
  LEFT OUTER JOIN STOREIS.THELY ON
  THELY.TH=KESZLET.TH)
  LEFT OUTER JOIN STOREIS.ZONA ON
  ZONA.ZONAKOD=THELY.ZONA)
  LEFT OUTER JOIN STOREIS.ARUTELEP ON
  ARUTELEP.TH_KOD='P' AND
  ARUTELEP.ARUKOD=KESZLET.ARUKOD)
  LEFT OUTER JOIN STOREIS.RAKTAR ON
  RAKTAR.RAKTAR=KESZLET.RKOD)
  WHERE KESZLET.ARUKOD=ARUTORZS.ARUKOD ) keszlet

  JOIN "your_tables" ON keszlet.PK = "another_PK"
    --and so on...

【讨论】:

    【解决方案2】:

    使用表格表达式。

    例如:

    select 
      x.*,
      c * m as r
    from (
      select
        a,
        (select max(b) from t) as m,
        c
      from t
    ) x
    

    表表达式生成一个“命名列”m,您可以在表达式 c * m 的主查询中使用它。

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 2015-10-20
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多