2011-12-29 2 views
2

저는 Postgres 8.4.9를 사용 중이며 크로스 탭을 작동시키는 데 어려움을 겪고 있습니다. 여기 왜 내 Postgres 크로스 탭에서 '쿼리 지정 반환 tuple에 7 개의 열이 있지만 크로스 탭에서 6을 반환합니까?'라는 오류가 발생합니다.

내 데이터의 모양 무엇 :

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) 

있다. 그러나이 경우 오류가 발생합니다. "쿼리 지정 반환 tuple에는 7 개의 열이 있지만 크로스 탭에는 6이 반환됩니다."

어느 것이 당혹 스럽습니다. 누군가가 내가 잘못 한 일을 보는 경우에는 많은 문제가 당신의 결과 집합에 box_well_run_date을 찾을 수 없습니다입니다

--Rick

+0

얼마나 많은 행이 두 번째 쿼리 ('별개의 markername을 선택 ...') 않습니다 생산? –

+0

은 우리에게 두 번째 쿼리에서 반환되는 내용을 분명히 할 필요가 있습니다 ... ct는 있지만 마커는 제공하지 않습니다. 두 번째 쿼리에서 돌아 오는 두 개의 고유 값과 두 개의 고유 값만 기대합니까? 크로스 탭에 대한 선호는 ID 필드를 원하는 7 개의 각 열과 조인하고 (각 ID에 대해 7 행을 만들어 크로스 탭 보고서를 채우는) select 문을 만든 다음 다른 테이블에 조인하여 값을 채 웁니다. 필요합니다. – Twelfth

+0

사과; 여기에 무엇을 두 번째 쿼리의 반환 : markername ------------ 5HTTLPR Amelo 카스피 DAT1 DRD4 (5 행) – rixter

답변

0

.... 감상 할 수있다.

대신이 시도

:

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);