A variável de coluna SQL AS/400 (ecrã Verde) não foi encontrada

Bom dia.

estou a executar uma consulta SQL dentro do AS/400 (ecrã verde) e tenho um problema com a obtenção de um nome de coluna alias.

Aqui está o meu guião.
  /* Join forecast info with item warehouse info */
  SELECT item, itmdsc, 
         today,
         October, QSMOIB,
         (QSMOIB - October) AS Sales_less_October      

    FROM
         /* Summarizing forecast data in a SQL query */
         (SELECT  item, itmdsc, whse,
                 today, range,
                 (wk01 + wk02 + wk03 + wk04) AS October 
            FROM FCSTCUR) AS f      
    JOIN     
         /* Select "Qty sold this period" */
         (SELECT ITNOIB, WHIDIB, QSMOIB
            FROM ITEMBLL0) AS iw

      ON f.item = iw.ITNOIB AND
         f.whse = iw.WHIDIB 
   WHERE Sales_less_October <> 0
ORDER BY Sales_less_October ASC

que quando eu o executar eu recebo o erro:

Column or global variable SALES_LESS_OCTOBER not found.

No entanto, se mudar o guião para o seguinte, funciona como esperado:

    /* Join forecast info with item warehouse info */
  SELECT item, itmdsc, 
         today,
         October, QSMOIB,
         (QSMOIB - October) /* AS Sales_less_October */   

    FROM
         /* Summarizing forecast data in a SQL query */
         (SELECT  item, itmdsc, whse,
                 today, range,
                 (wk01 + wk02 + wk03 + wk04) AS October 
            FROM FCSTCUR) AS f      
    JOIN     
         /* Select "Qty sold this period" */
         (SELECT ITNOIB, WHIDIB, QSMOIB
            FROM ITEMBLL0) AS iw

      ON f.item = iw.ITNOIB AND
         f.whse = iw.WHIDIB 
   WHERE (QSMOIB - October) <> 0
ORDER BY (QSMOIB - October) ASC

eu simplesmente substituí "Sales_less_October" por (QSMOIB-outubro).

Gostaria muito de poder usar o pseudónimo como é muito mais claro do que a apresentação "expressão numérica":

enter image description here

Muito obrigado, lamento não poder fazer o upload data...it está no nosso servidor.

Author: Sescopeland, 2017-10-20

1 answers

Se quiser usar o seu nome falso com as suas cláusulas WHERE e ORDER BY, pode fazê-lo se aninhar o resto da consulta num WITH ():

WITH ONE AS (
   SELECT   item, itmdsc, 
            today,
            October, QSMOIB,
            (QSMOIB - October) AS Sales_less_October      

   FROM (
      SELECT   item, itmdsc, whse,
               today, range,
               (wk01 + wk02 + wk03 + wk04) AS October 
      FROM FCSTCUR
      ) AS f      
   JOIN (
      SELECT ITNOIB, WHIDIB, QSMOIB
      FROM ITEMBLL0
      ) AS iw
   ON f.item = iw.ITNOIB
   AND f.whse = iw.WHIDIB
   )
SELECT *
FROM ONE
WHERE Sales_less_October <> 0
ORDER BY Sales_less_October ASC
 2
Author: nxl4, 2017-10-20 19:25:05