我们如何在交叉表中执行以下任务?

时间:2014-02-17 07:04:13

标签: postgresql

ProductSales表的示例。

- 表 创建表productsales (   country varchar(20),   salesman varchar(20),   金额整数 )

- 将几条记录插入到产品中 插入到productsales值('UK','Sam',25000); ... ...

- 查询要在plpgsql中的“crosstab”中执行,而不是使用pivot运算符。 选择推销员,英国,美国,阿联酋 来自productsales pivot - 我知道这在plpgsql中不起作用 (     总和(量)     对于国家     IN([英国],[美国],[阿联酋]) ) AS pt

1 个答案:

答案 0 :(得分:1)

要创建crosstab,您可以使用PostgreSQL附带的tablefunc模块。您首先需要安装它(这样做取决于您安装PostgreSQL的方式),然后创建扩展:

CREATE EXTENSION tablefunc;

有了这个,你可以简单地进行crosstab查询:

SELECT * FROM crosstab($$
        /* Your normal query with your own filters (the fields must be always at the same order) */
        SELECT salesman, country, amount
        FROM productsales
        WHERE country IN ('UAE','UK','US')
        /* The ORDER is really important here */
        ORDER BY 1, 2
    $$,
    /* The values that will be crossed, notice they are ordered alphabetically */
    $$VALUES('UAE'),('UK'),('US')$$
) AS
/* Here you tell which columns and types you expect */
productsales(salesman varchar(20), uae integer, uk integer, us integer);