我有
ABC ABD ABE ect
它工作正常,但我想计算
var text = "";
var x = 123;
while (x > 0) {
text += "<br>The number is " + x;
x=x/10;
}
document.getElementById("demo").innerHTML = text;
基于<p id="demo"></p>
的值
它应该很简单SELECT col, col1 from table
CASE
WHEN other_col = 'Canada' THEN 1
ELSE 2
END AS col2
= col3
中的值
并以相同的col2
如何实现?
答案 0 :(得分:1)
您不能在同一select语句内的col2
之类的表达式中使用col2 / 2
列。
您可以像这样重复相同的CASE语句:
SELECT
col,
col1,
CASE WHEN other_col = 'Canada' THEN 1 ELSE 2 END AS col2
CASE WHEN other_col = 'Canada' THEN 0.5 ELSE 1 END AS col3
FROM table
或通过将SELECT语句嵌套在另一个内部:
SELECT
t.*,
t.col2 / 2 AS col3
FROM (
SELECT
col,
col1,
CASE WHEN other_col = 'Canada' THEN 1 ELSE 2 END AS col2
FROM table
) AS t
答案 1 :(得分:0)
不能使用别名的原因是因为“一次全部”表达式求值。 表达式不是按顺序求值,而是“一次全部”求值,这也使您可以执行
UPDATE Table SET Col1 = Col2, Col2 = Col1...
如果按顺序处理表达式,则不可能。
恕我直言,使用CTE而不是重复CASE更加容易和清楚。
;WITH CTE AS
(
SELECT col, col1, CASE
WHEN other_col = 'Canada'
THEN 1
ELSE 2
END AS col2
FROM table
)
SELECT *, <Whatever Function On (Col2).
FROM CTE;
答案 2 :(得分:0)
您可以在Postgres中使用横向连接:
SELECT t.col, t.col1, v.col2
FROM table t CROSS JOIN LATERAL
(VALUES (CASE WHEN other_col = 'Canada' THEN 1 ELSE 2 END)
) v(col2);
然后,您可以使用v.col2
使自己想要的任何其他表情都感到高兴。