2

我在 SELECT 子句中创建一个临时列,如下所示:

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col 
FROM foo

现在我可以使用“my_col”访问和订购结果,即

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col 
FROM foo 
ORDER BY my_col

但是当我想要这样扩展列时

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col, 
       my_col * 5 AS my_col_2 
FROM foo

SQLite 产生“没有这样的列:my_col”。

那么如何在查询中使用临时列来进一步使用呢?有可能吗?

4

4 回答 4

3

您可以使用子查询:

SELECT X.my_col, X.my_col * 5 AS my_col_2
FROM (
     SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col FROM foo
     ) X
ORDER BY X.my_col

或者只是重复 case 语句:

SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col, CASE WHEN a THEN 1 ELSE 0 END * 5 AS my_col_2 FROM fo
于 2013-10-11T10:03:29.677 回答
1

我通过创建一个视图解决了我的问题:

CREATE VIEW IF NOT EXISTS foo_view SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col FROM foo

之后,我可以根据需要访问包含新列的视图

SELECT *, my_col FROM foo_view
于 2013-10-11T15:46:33.130 回答
0

不幸的是,您不能在声明它的确切时刻使用别名:

-- this works
select col c        
from Table1
order by c;

-- this works
select col c
from Table1
where c = 1;

-- this won't
select col c,
       c * 2
from Table1
order by c;

您可以使用SQLFiddle中的那些。

于 2013-10-11T10:19:23.020 回答
0
SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col, CASE WHEN a THEN 1 ELSE 0 END * 5 AS my_col_2 FROM foo
于 2013-10-11T10:03:58.430 回答