4

在创建表/列时,如何在 SQL => PostgreSQL 中使用“java if 语句”?

    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)

这可能是错误的,请告诉我们,社区如何做这种行为。

4

2 回答 2

3

您在这里寻找的是一个计算列,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

或者您可以使用触发器在插入/更新时填充列。

于 2012-12-26T20:19:46.980 回答
2

您可以使用特殊的 PostgreSQL 功能:“生成”列。

根据现有表,说:

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;

这些相关问题下的更多信息:
如何根据其他列的值和选择在 postgres 中创建列?
将常见查询存储为列?

于 2012-12-26T20:51:50.353 回答