首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create-table中的Case语句

create-table中的Case语句
EN

Stack Overflow用户
提问于 2012-12-27 04:15:27
回答 2查看 12.2K关注 0票数 4

在创建表/列时,如何使用SQL => PostgreSQL中的"java if-statement“?

代码语言:javascript
复制
    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)

这在法律上是错误的,请告诉我们,社会应该如何做这种行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-27 04:19:47

您在这里寻找的是一个计算列,Postgres不直接支持它。您可以在视图中实现此功能,如下所示:

代码语言:javascript
复制
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时填充列。

票数 3
EN

Stack Overflow用户

发布于 2012-12-27 04:51:50

您可以使用一个特殊的PostgreSQL特性:"generated“列。

基于现有的表,例如:

代码语言:javascript
复制
CREATE TABLE store (sold_amount int, ...):

你可以创建这个特殊的函数:

代码语言:javascript
复制
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$;

然后您可以查询:

代码语言:javascript
复制
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?

Store common query as column?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档