Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Postgresql Postgres:在交叉表查询中,存储桶总是从左侧填充_Postgresql_Crosstab - Fatal编程技术网

Postgresql Postgres:在交叉表查询中,存储桶总是从左侧填充

Postgresql Postgres:在交叉表查询中,存储桶总是从左侧填充,postgresql,crosstab,Postgresql,Crosstab,我的查询如下所示: SELECT mthreport.* FROM crosstab ('SELECT to_char(ipstimestamp, ''mon DD HH24h'') As row_name, varid::text || log.varid || ''_'' || ips.objectname::text As bucket, COUNT(*)::integer As bucketvalue FROM loggingdb_ips_boolean As log INNER

我的查询如下所示:

SELECT mthreport.*
FROM crosstab
('SELECT 
to_char(ipstimestamp, ''mon DD HH24h'') As row_name, 
varid::text || log.varid || ''_'' || ips.objectname::text As bucket, 
COUNT(*)::integer As bucketvalue
FROM loggingdb_ips_boolean As log 
INNER JOIN IpsObjects As ips 
ON log.Varid=ips.ObjectId
WHERE ((log.varid = 37551) 
OR (log.varid = 27087) 
OR (log.varid = 50876)
OR (log.varid = 45096)
OR (log.varid = 54708)
OR (log.varid = 47475)
OR (log.varid = 54606)
OR (log.varid = 25528)
OR (log.varid = 54729))
GROUP BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, bucket        
ORDER BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, bucket' )

As mthreport(item_name text,  varid_37551 integer, 
            varid_27087  integer , 
            varid_50876  integer , 
            varid_45096  integer , 
            varid_54708  integer , 
            varid_47475  integer , 
            varid_54606  integer , 
            varid_25528  integer , 
            varid_54729  integer , 
            varid_29469 integer)
可以使用以下连接字符串对测试表测试查询: “主机=bellariastrasse.com端口=5432 dbname=ipsloging用户=guest密码=guest”


查询语法正确,运行良好。我的问题是,计数(*)值总是填充最左边的列。但是,在许多情况下,左边的列应该有一个零或NULL,并且只有第二列(或第n列)应该被填充。我的大脑在融化,我不知道怎么回事

问题的解决方案是使用带有两个参数的
交叉表()
变量

第二个参数(另一个查询字符串)生成输出列列表,以便正确分配数据查询(第一个参数)中的空值

检查,尤其是:

交叉表的单参数形式的主要限制是 它对组中的所有值都一视同仁,将每个值插入 第一个可用列。如果希望值列与 特定类别的数据,某些组可能没有 有些类别,效果不好。双参数形式 of crosstab通过提供一个 与输出列对应的类别


我的。我最近发布了一些相关的答案。

我正在尝试连接psql并获得pg_hba.conf validation failures.oops-抱歉。我匆忙地建立了客户帐户,可能把事情弄糟了。我今天会检查那里出了什么问题。现在应该修复连接。你能再试一次吗?谢谢你,埃尔文,吻德·霍恩德·格恩先生(‘你爸爸’,粗略翻译)!我将尝试双参数查询并返回报告!宾果-我按照欧文的指示设置了第二个查询,现在一切都很顺利!接下来,我将尝试使用一个函数来提供类别字段。在我看来,FUNCTION way是一个很好的解决方案,它支持生成“动态”交叉表,这些交叉表的类别可能事先不知道。我说得对吗?@aag:“Küss die Hand gnä'Frau!”可能是维也纳的老派问候语,但实际上只针对女性——在旧奥地利帝国,在公众场合同性之间的手吻并不流行D@aag:关于动态函数:仅当返回类型相同时才能执行此操作。否则,您将不得不返回具有未知列的记录-这将使您回到开始的位置。我在尝试生成函数时仍然有很多困难。枢轴应位于计算字段varid::text | | | log.varid | |‘|‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘;但我真的不知道如何编写一个函数来提取这些值。你能帮我一下吗?