Я использую 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».
Что сбивает с толку.Если кто-нибудь увидит, что я сделал не так, это будет высоко оценено ...
- Рик