【发布时间】:2017-10-20 15:38:48
【问题描述】:
早上好,
我正在 AS/400(绿屏)内运行 SQL 查询,但在提取别名列名时遇到问题。
这是我的脚本:
/* 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
当我运行它时,我收到错误:
Column or global variable SALES_LESS_OCTOBER not found.
但是,如果我将脚本更改为以下内容,它会按预期工作:
/* 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
我只是将“Sales_less_October”替换为(QSMOIB - 10 月)。
我真的很希望能够使用别名,因为它比显示“数字表达式”更清晰:
非常感谢,抱歉我无法上传数据……它在我们的服务器上。
【问题讨论】:
-
你不能。您的解决方法是正确的。在 SELECT 中使用别名,不要在 WHERE 中使用别名。结合您的 2 个查询以获得预期结果。
-
您实际上可以在 order by 中使用别名,但不能在 where 子句中使用。这一切都与处理的逻辑顺序有关。
-
@SeanLange 是的,您对这个主题有什么阅读建议吗?我对 SQL 还很陌生,并尽可能尝试使用最佳实践。
-
我会保留您的别名并按顺序保留。您必须在 where 子句中再次包含计算。这是因为它在计算返回值之前确定要返回哪些行。这就是为什么你不能在那里使用别名的原因。这是一篇关于处理订单主题的好文章。 blog.sqlauthority.com/2009/04/06/…
标签: sql sql-server db2-400