Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交叉表函数posgresql_Sql_Postgresql_Pivot_Crosstab_Postgres Crosstab - Fatal编程技术网

交叉表函数posgresql

交叉表函数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

我不熟悉postgresql,甚至对crosstab也比较新,但从我所读到的内容来看,下面的查询应该可以工作:

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()
更容易。谢谢。你能给我举个例子或者给我指一些教程吗?请看与你的问题无关的,但是:你真的应该避免那些可怕的引用标识符。他们的麻烦远比他们值得的多。谢谢你的帮助。非常感谢