我正在尝试将column1乘以column2;根据column2中是否有值。如果column2中有一个值,则答案将放在column3中。我正在尝试使用WITH和Common Table Expression。
我搜索了各个论坛,似乎没有与此类似的CTE问题。
WITH cte_apfc AS(
SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2)))
FROM table1
)
UPDATE table1
SET "column3" = cte_apfc
FROM cte_apfc
WHERE "column2" IS NOT NULL;
这是我当前收到的错误,我不确定如何解决。
错误:列“ column3”的类型为数字,但表达式的类型为record 第13行:SET“ column3” = cte_apfc ^ 提示:您将需要重写或强制转换该表达式。
答案 0 :(得分:0)
您无法引用CTE的别名,您需要引用该列。为此,您需要定义列别名:
WITH cte_apfc AS(
SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2))) as value
FROM table1
)
UPDATE table1
SET "column3" = c.value
FROM cte_apfc c
WHERE "column2" IS NOT NULL;
您可能还希望在查询中使用WHERE "column2" IS NOT NULL
将值相乘。
请注意,您实际上并不需要CTE:
UPDATE table1
SET "column3" = (SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2)))
FROM table1)
WHERE "column2" IS NOT NULL;
答案 1 :(得分:0)
哇,我太复杂了。我不需要使用CAST,因为列已经是数字了(谢谢horse_with_no_name)。
解决方案不只是简单的...
UPDATE table1
SET "column3" = "column1" * "column2"
WHERE "column2" IS NOT NULL;