转发PostgreSQL

时间:2015-07-07 17:33:48

标签: sql sql-server postgresql pivot

我正试图找到一种方法在Postgres做转轴,但我不能使用它,我试图找到另一种方式。我发现以下网站解释了SQL Server中的数据透视表,在示例一中,我确实想要做什么。 http://sqlhints.com/2014/03/10/pivot-and-unpivot-in-sql-server/

示例是:

CREATE TABLE CourseSales(Course VARCHAR(50),Year INT,Earning  MONEY);

INSERT INTO CourseSales VALUES('.NET',2012,10000);
INSERT INTO CourseSales VALUES('Java',2012,20000);
INSERT INTO CourseSales VALUES('.NET',2012,5000);
INSERT INTO CourseSales VALUES('.NET',2013,48000);
INSERT INTO CourseSales VALUES('Java',2013,30000);

使用pivot功能,查询如下:

SELECT *FROM CourseSales
PIVOT(SUM(Earning)       
FOR Course IN ([.NET], Java)) AS PVTTable;

我想在postgresql中做同样的事情,但是采用像上面这样的动态方式。

2 个答案:

答案 0 :(得分:2)

不幸的是,我无法找到一种方法来使用 postgresql 来转动我的表格,并以我需要的形式得到结果,但我尝试在 R < / strong>,我发现它更容易。

我将我的postgres数据库与R连接,然后我使用reshape包在我的表中执行一个数据透视表。

对于你们任何想要使用我方法的人来说,这就是我所做的。

首先将R与数据库连接。

library(RPostgreSQL)
#create driver
dDriver <- dbDriver("PostgreSQL")
#connect to the server
conn <- dbConnect(dDriver, user="user", password="mypassword", dbname="postgres")

然后使用重塑包

library(reshape)

获取表格

rs_CourseSales <- dbSendQuery(conn, 'SELECT * FROM CourseSales;')
dbRows_CourseSales <- fetch(rs_CourseSales, -1)

支点:

pivot_CourseSales<-(cast(dbRows_CourseSales,  Course ~ Year))

我发现这个例子非常有用: http://www.r-bloggers.com/pivot-tables-in-r/

答案 1 :(得分:1)

我自己并不熟悉postgresql,但是有另一种方法可以将日期通俗地称为交叉表 - 旋转。这是一个如何重写上述查询的示例,我非常确定所有这些运算符都存在于postgre中

CREATE TABLE CourseSales(Course VARCHAR(50),Year INT,Earning  MONEY);

INSERT INTO CourseSales VALUES('.NET',2012,10000);
INSERT INTO CourseSales VALUES('Java',2012,20000);
INSERT INTO CourseSales VALUES('.NET',2012,5000);
INSERT INTO CourseSales VALUES('.NET',2013,48000);
INSERT INTO CourseSales VALUES('Java',2013,30000);

-- Your version (AKA TSQL)
SELECT *FROM CourseSales
PIVOT(SUM(Earning)       
FOR Course IN ([.NET], Java)) AS PVTTable;

-- Cross-tab
select 
    Year,
    sum(case when Course = '.NET' then Earning else 0 end) as net,
    sum(case when Course = 'Java' then Earning else 0 end) as java
from CourseSales
group by year

这是一篇关于交叉表枢轴的文章。同样,我知道这是特定于TSQL的,但运算符应该允许在任何ansi sql方言中使用类似的功能。

http://www.sqlservercentral.com/articles/T-SQL/63681/