Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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交叉表会产生错误:“查询指定的返回元组有7列,但交叉表返回6”?_Postgresql_Crosstab - Fatal编程技术网

Postgresql 为什么我的Postgres交叉表会产生错误:“查询指定的返回元组有7列,但交叉表返回6”?

Postgresql 为什么我的Postgres交叉表会产生错误:“查询指定的返回元组有7列,但交叉表返回6”?,postgresql,crosstab,Postgresql,Crosstab,我正在使用Postgres 8.4.9,但无法让交叉表正常工作 以下是我的数据: rowname | bucket | bucket_value ----------------+---------------------+-------------- CL100001 10011 | 1 A01 | 01/01/2001 | 14 16 CL100001 10011 | 1 A01 | 01/01/2001 | CL100001 1001

我正在使用Postgres 8.4.9,但无法让交叉表正常工作

以下是我的数据:

   rowname     |       bucket        | bucket_value 
----------------+---------------------+--------------
 CL100001 10011 | 1 A01 | 01/01/2001  | 14 16
 CL100001 10011 | 1 A01 | 01/01/2001  |  
 CL100001 10011 | 1 A01 | 01/01/2001  |  
 CL100001 10011 | 1 A01 | 01/01/2001  | 440 480
 CL100001 10011 | 1 A01 | 01/01/2001  | 475 475
 CL100002 10021 | 1 B01 | 01/01/2001  | 16 16
 CL100002 10021 | 1 B01 | 01/01/2001  |  
 CL100002 10021 | 1 B01 | 01/01/2001  |  
 CL100002 10021 | 1 B01 | 01/01/2001  | 440 480
 CL100002 10021 | 1 B01 | 01/01/2001  | 475 475
 CL100003 10030 | 1 C01 | 01/01/2001  | 14 16
 CL100003 10030 | 1 C01 | 01/01/2001  |  
 CL100003 10030 | 1 C01 | 01/01/2001  |  
 CL100003 10030 | 1 C01 | 01/01/2001  | 440 440
 CL100003 10030 | 1 C01 | 01/01/2001  | 475 475

这是从用于准备数据的表ct中选择的

接下来,我的查询如下

SELECT gtreport.* FROM crosstab('SELECT 
    rowname, 
    bucket,
    bucket_value
FROM
    ct  
ORDER BY 
    rowname, bucket',
'SELECT DISTINCT
    markername  
FROM 
    markers M,
    genotypes G,
    gsamples S,
    guploads U
WHERE 
    M.markerid=G.markers_id
    AND G.gsamples_id=S.id 
    AND S.guploads_id=U.id 
    AND ( U.ibg_study_id=15 AND U.ibg_project_id is NULL) 
ORDER BY 
    M.markername')
AS gtreport(
 labid text, 
 box_well_run_date text, 
 HTTLPR text, 
 Amelo text,
 Caspi text,
 DAT1 text,
 DRD4 text)
我已经尽我所能按照Postgres文档构建了它。 但这会产生错误 查询指定的返回元组有7列,但交叉表返回6列

这令人困惑。如果有人看到我做错了什么,我将不胜感激

-Rick

您的问题是框\u井\u运行\u结果集中找不到日期

请尝试以下方法:

SELECT gtreport.* FROM crosstab('SELECT 
    rowname, 
    bucket,
    bucket_value
FROM
    ct  
ORDER BY 
    rowname, bucket',
'SELECT DISTINCT
    markername  
FROM 
    markers M,
    genotypes G,
    gsamples S,
    guploads U
WHERE 
    M.markerid=G.markers_id
    AND G.gsamples_id=S.id 
    AND S.guploads_id=U.id 
    AND ( U.ibg_study_id=15 AND U.ibg_project_id is NULL) 
ORDER BY 
    M.markername')
AS gtreport(
 labid text, 
 HTTLPR text, 
 Amelo text,
 Caspi text,
 DAT1 text,
 DRD4 text);
您的问题是,在结果集中找不到方框\良好\运行\日期

请尝试以下方法:

SELECT gtreport.* FROM crosstab('SELECT 
    rowname, 
    bucket,
    bucket_value
FROM
    ct  
ORDER BY 
    rowname, bucket',
'SELECT DISTINCT
    markername  
FROM 
    markers M,
    genotypes G,
    gsamples S,
    guploads U
WHERE 
    M.markerid=G.markers_id
    AND G.gsamples_id=S.id 
    AND S.guploads_id=U.id 
    AND ( U.ibg_study_id=15 AND U.ibg_project_id is NULL) 
ORDER BY 
    M.markername')
AS gtreport(
 labid text, 
 HTTLPR text, 
 Amelo text,
 Caspi text,
 DAT1 text,
 DRD4 text);

第二个查询选择了多少行不同的markername。。。生产?需要为我们澄清在第二次查询中返回的内容…您提供ct的组成,但不提供标记。您是否希望从第二个查询返回两个不同的值和两个不同的值?我对交叉表的偏好是创建一个select语句,将ID字段连接到您想要的7列中的每一列,为每个ID创建7行以填充交叉表报告,然后将其连接到其他表以根据需要填充值;下面是第二个查询返回的结果:markername------5HTTLPR Amelo Caspi DAT1 DRD4 5 rowsHello@sexth,抱歉;下面是第二个查询返回的内容:markername------5HTTLPR Amelo Caspi DAT1 DRD4 5行这些是AS gtreport子句中指定的5列标题。我不确定我是否理解如何构造你的建议答案…但这听起来像是我需要的。。。谢谢,Rixter你能把这个添加到答案中吗?这样我就可以投票并从未回答的问题列表中删除它了?你的第二个查询选择了多少行不同的标记名。。。生产?需要为我们澄清在第二次查询中返回的内容…您提供ct的组成,但不提供标记。您是否希望从第二个查询返回两个不同的值和两个不同的值?我对交叉表的偏好是创建一个select语句,将ID字段连接到您想要的7列中的每一列,为每个ID创建7行以填充交叉表报告,然后将其连接到其他表以根据需要填充值;下面是第二个查询返回的结果:markername------5HTTLPR Amelo Caspi DAT1 DRD4 5 rowsHello@sexth,抱歉;下面是第二个查询返回的内容:markername------5HTTLPR Amelo Caspi DAT1 DRD4 5行这些是AS gtreport子句中指定的5列标题。我不确定我是否理解如何构造你的建议答案…但这听起来像是我需要的。。。谢谢,Rixter你能把这个添加到答案中吗?这样我就可以对它进行投票,并从未回答的问题列表中删除这个吗?