我正试图找到一种方法在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中做同样的事情,但是采用像上面这样的动态方式。
答案 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方言中使用类似的功能。