在创建表/列时,如何使用SQL => PostgreSQL中的"java if-statement“?
CREATE TABLE Store(
Discount INT
AS CASE
WHEN SOLD_Amount>100000 THEN 2
WHEN SOLD_Amount>500000 THEN 5
WHEN SOLD_Amount>1000000 THEN 10
ELSE 0
END
NOT NULL)这在法律上是错误的,请告诉我们,社会应该如何做这种行为。
发布于 2012-12-27 04:19:47
您在这里寻找的是一个计算列,Postgres不直接支持它。您可以在视图中实现此功能,如下所示:
CREATE VIEW someview AS
SELECT SOLD_Amount,
CASE
WHEN SOLD_Amount>100000 THEN 2
WHEN SOLD_Amount>500000 THEN 5
WHEN SOLD_Amount>1000000 THEN 10
ELSE 0
END As Discount或者您可以使用触发器在insert/update时填充列。
发布于 2012-12-27 04:51:50
您可以使用一个特殊的PostgreSQL特性:"generated“列。
基于现有的表,例如:
CREATE TABLE store (sold_amount int, ...):你可以创建这个特殊的函数:
CREATE FUNCTION store_sold_amount(rec store)
RETURNS int LANGUAGE SQL IMMUTABLE
AS
$func$
SELECT CASE
WHEN rec.sold_amount > 100000 THEN 2
WHEN rec.sold_amount > 500000 THEN 5
WHEN rec.sold_amount > 1000000 THEN 10
ELSE 0 END;
$func$;然后您可以查询:
SELECT s.amount, s.store_sold_amount
FROM store s;在这些相关问题下有更多信息:
How can I create a column in postgres from values and selections based on other columns?
https://stackoverflow.com/questions/14045738
复制相似问题