Почему моя кросс-таблица Postgres выдает ошибку: «Указанный в запросе кортеж возврата имеет 7 столбцов, а кросс-таблица возвращает 6»? - PullRequest
2 голосов
/ 29 декабря 2011

Я использую 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».

Что сбивает с толку.Если кто-нибудь увидит, что я сделал не так, это будет высоко оценено ...

- Рик

1 Ответ

0 голосов
/ 27 марта 2013

Ваша проблема box_well_run_date не найдена в вашем наборе результатов.

Попробуйте вместо этого:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...