在 GROUP BY 中使用列别名

Kon*_*rad 5 oracle alias group-by

我有一个查询,其中链接了两列。为什么别名不能在工作中的GROUP BY条款,但ORDER BY条款,它的工作?如何正确编写选择?

SELECT
  KOS_VER_ID        AS "Vertrag"
  , WHR_ISO_3_CODE  AS "Waehrung"
  , KOS_KOA_ST_KZN || '  -  ' || ST_LANGBEZ_EN as "Kostenart"
  , SUM (KOS_BETRAG) AS "Summe pro KOA"
FROM
  KOSTEN
  , WAEHRUNG
  , SCHLUESSELTABELLE
WHERE 
  KOSTEN.KOS_VERHI_WHR_ID = WAEHRUNG.WHR_ISO_ID
  AND KOSTEN.KOS_KOA_ST_KZN = SCHLUESSELTABELLE.ST_ID
  AND KOS_VER_ID in (2509, 2510, 2511)
GROUP BY
  KOS_VER_ID
  , WHR_ISO_3_CODE
  , KOS_KOA_ST_KZN || '  -  ' || ST_LANGBEZ_EN
ORDER BY
  "Vertrag"
  , "Kostenart"
;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

为什么别名在 GROUP BY 子句中不起作用

因为这些只是语法规则。列别名可以在ORDER BY子句中使用,但不能在GROUP BY子句中使用。

如果您查看语法图,这将变得显而易见:

order by条款定义为在此处输入图片说明

所以在ORDER BY允许 an 表达式之后,一个位置 ( order by 1) 或 ac_alias代表“列别名”。

group by被定义为

在此处输入图片说明

如您所见,c_alias后面没有选项,因此您不能使用列别名。

不过,这对 Oracle 来说并没有什么特别之处。这就是它在 SQL 标准中的定义方式。