交叉表函数posgresql
我不熟悉postgresql,甚至对crosstab也比较新,但从我所读到的内容来看,下面的查询应该可以工作:交叉表函数posgresql,sql,postgresql,pivot,crosstab,postgres-crosstab,Sql,Postgresql,Pivot,Crosstab,Postgres Crosstab,我不熟悉postgresql,甚至对crosstab也比较新,但从我所读到的内容来看,下面的查询应该可以工作: select * from crosstab( $$select distinct "AccountNumber" , "ProductCategory", sum("ProductQuantity") sm from "MsfDataRecords" mdr group by "ProductC
select * from crosstab(
$$select distinct "AccountNumber" , "ProductCategory", sum("ProductQuantity") sm
from "MsfDataRecords" mdr
group by "ProductCategory", "AccountNumber", "ProductQuantity"$$
)as ct("AccountNumber" text , "ProductCategory" text , sm numeric)
但是此错误与SQL错误[42601]:错误:返回和SQL元组描述不兼容
我已经检查了所有的数据类型,它们都是正确的。我不确定这是否与求和函数有关
感谢任何帮助错误在最后一行。ct中表示的列在此行中选择。而不是
)as ct("AccountNumber" text , "ProductCategory" text , sm numeric)
应该是
as ct(
AccountNumber text,
ProductCategory1 numeric,
ProductCategory2 numeric,
ProductCategory3 numeric,
...,
ProductCategoryN numeric)
您的GROUP BY
子句还应仅包括稍后排序的第一列和第二列
这里有一个例子来说明。或者,如果您喜欢代码,这里有一个示例代码
CREATE TABLE MsfDataRecords(
AccountNumber text,
ProductCategory text,
ProductQuantity numeric
)
;
INSERT INTO MsfDataRecords(AccountNumber, ProductCategory, ProductQuantity) VALUES
('A1', 'Food', 3),
('A1', 'Food', 1),
('A2', 'Food', 3),
('A2', 'Electronics', 2),
('A2', 'Fashion', 10)
;
SELECT * FROM CROSSTAB(
$$
SELECT AccountNumber , ProductCategory, SUM(ProductQuantity) AS sm
FROM MsfDataRecords AS mdr
GROUP BY 1,2
ORDER BY 1,2
$$
)AS ct(
AccountNumber text,
Food numeric,
Electronics numeric,
Fashion numeric
)
;
请注意,这样的数据透视只能在PostgreSQL中使用,使用条件聚合几乎总是比使用
crosstab()
更容易。谢谢。你能给我举个例子或者给我指一些教程吗?请看与你的问题无关的,但是:你真的应该避免那些可怕的引用标识符。他们的麻烦远比他们值得的多。谢谢你的帮助。非常感谢