2011-12-29 7 views
2

私はPostgres 8.4.9を使用しており、クロスタブの動作に問題があります。ここで私のPostgresクロス集計でエラーが発生するのはなぜですか? 'クエリ指定の戻り値タプルには7つのカラムがありますが、クロス集計では6が返されます。

は何を私のデータは次のようになります:CT、これはテーブルから選択される

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 

...

、それはデータを準備するために使用されます。

次に、私のクエリは、私も私ができるようにPostgresのマニュアルを参照して、次の構築を試みた

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) 

のように見えます。 これにより、エラー が生成されます。「クエリ指定の戻りタプルには7つの列がありますが、クロス集計では6が返されます。

困ったことはありますか。誰もが私が間違って何をやったか見ている場合、それははるかに高く評価されるだろう....

--Rick

+0

をあなたの2番目のクエリ( '明確なmarkernameを選択するが...')どのように多くの行を生成しますか? –

+0

は、私たちの2番目のクエリで何が返されているかを明確にする必要があります...あなたはctを作りますが、マーカーは付けません。 2つの異なる値があり、2つの異なる値だけが2番目のクエリから戻ってくることを期待していますか?クロス集計に対する私の好みは、IDフィールドを必要な7つの列のそれぞれに結合するselect文を作成し、クロス集計レポートを作成するためにIDごとに7つの行を作成し、これを他の表に結合して必要です。 – Twelfth

+0

謝罪;ここではどのような2番目のクエリが返すです: markername ------------ 5HTTLPR Amelo Caspi DAT1 DRD4 (5行) – rixter

答えて

0

あなたの問題は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); 
関連する問題