【问题标题】:SQLite - no such column: XSQLite - 没有这样的列:X
【发布时间】:2022-01-05 10:18:28
【问题描述】:

我知道问题在于 SELECT 最后执行。 CASE 执行时,X 列还不存在。 X 列及其值从 a 列和 b 列值的减法中得出 => ROUND((ab)),2) AS [X] 您可以完整地注意到它代码较低: 基本上问题如下:如何让 X 列在 CASE 之前显示其值。

SELECT 
    e, a, b,ROUND((a-b)),2) AS [X],
    CASE WHEN X BETWEEN 5 AND 10 THEN 'Good Choice'
    ELSE 'bad choice' END AS 'choice'
FROM table_1
LEFT JOIN table_2 ON table_1.column_1 = table_2.column_2
Where BBB = "VVV" OR BBB = "CCC"
GROUP BY column_1;

【问题讨论】:

  • 当前的错误信息是什么?
  • SQLite 支持 CTE(WITH 子句):sqlite.org/lang_with.html。您可以在此处使用一个来生成包含列 a, e, b, X 的行集,然后让外部(最终)查询引用 X
  • @Tim Biegeleisen 执行完成但出现错误。结果:没有这样的列:X
  • @j_random_hacker 谢谢你的提示,但你能以代码的形式写出来吗?这只是我使用 SQL 的第二天,我查看了您提供的链接,但我无法从文档文件中获取任何内容)
  • 我不想为你做这个练习,但你在这里需要一个非RECURSIVE CTE,我承认页面上似乎没有一个很好的例子.这是一个您可以概括的示例:WITH helper AS (SELECT x, y, x + y AS z FROM table42) SELECT x, y, z FROM helper WHERE z > 50;

标签: sql sqlite


【解决方案1】:

您不能在定义它的同一个选择中引用别名X。在这种情况下只需重复圆形表达式:

SELECT e, a, b, ROUND(a - b, 2) AS X,
       CASE WHEN ROUND(a - b, 2) BETWEEN 5 AND 10
            THEN 'Good Choice' ELSE 'bad choice' END AS choice
FROM table1 t1
LEFT JOIN table2 t2 ON t1.column1 = t2.column2
WHERE BBB = 'VVV' OR BBB = 'CCC'
GROUP BY column1;

【讨论】:

  • 天哪,我可以相信我是那么愚蠢,我怎么会错过这个解决方案。先生,非常感谢您,我现在终于可以睡觉了))
  • @StunedtStudencheskiy 我会用无知这个词代替,但学习很容易解决这个问题。很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 2020-08-16
  • 2017-02-09
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多