Postgresql 为什么我的Postgres交叉表会产生错误:“查询指定的返回元组有7列,但交叉表返回6”?
我正在使用Postgres 8.4.9,但无法让交叉表正常工作 以下是我的数据: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
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你能把这个添加到答案中吗?这样我就可以对它进行投票,并从未回答的问题列表中删除这个吗?