Ciao Enzo,
forse conviene abbandonare la crosstab (che non è una vera e propria pivot
- devi controllare che siano presenti tutti i valori altrimenti scala di un
posto), per cui forse sarebbe meglio usare una query tipo
WITH
can AS (
SELECT
sito,
quadrato,
min(specie),
sum(tot) AS cane
FROM
fauna
WHERE
specie = 'cane'
GROUP BY
1,2
),
gat AS (
SELECT
sito,
quadrato,
min(specie),
sum(tot) AS gatto
FROM
fauna
WHERE
specie = 'gatto'
GROUP BY
1,2
),
pec AS (
SELECT
sito,
quadrato,
min(specie),
sum(tot) AS pecora
FROM
fauna
WHERE
specie = 'pecora'
GROUP BY
1,2
),
lup AS (
SELECT
sito,
quadrato,
min(specie),
sum(tot) AS lupo
FROM
fauna
WHERE
specie = 'lupo'
GROUP BY
1,2
),
uni AS (
SELECT
sito,
quadrato
FROM
fauna
GROUP BY
1,2
)
SELECT
uni.sito,
uni.quadrato,
cane,
gatto,
pecora,
lupo
FROM
uni
LEFT JOIN
can
USING
(sito, quadrato)
LEFT JOIN
gat
USING
(sito, quadrato)
LEFT JOIN
pec
USING
(sito, quadrato)
LEFT JOIN
lup
USING
(sito, quadrato)
ORDER BY
1,2
;
che ti ritorna quello che volevi.
Il giorno 30 giugno 2014 15:05, Enzo Cocca <enzo.ccc@xxxxxxxxx> ha scritto:
ciao stefano,
grazie di cuore per il cosiglio ed effettivamente hai ragione tu è un
problema di tab pivot ma che comunque posso poi trggerare
cmq sto vedendo la funzione crosstab ho scritto l'istruzione in questo
modo;
select * from crosstab(
'select sum(count) as conteggio,specie,sito,quadrato
from fauna
group by sito,specie,quadrato'
)
as specie(sito character varying(10),
quadrato character varying(10),
bos integer,
volpe integer,
cane integer,
cervo integer)
ma ho questo errore
ERRORE: invalid source data SQL statement
DETTAGLI: The provided SQL must return 3 columns: rowid, category, and
values.
dove sbaglio?
scusami in anticipo se abuso del tuo tempo...
enzo
--
Enzo Cocca (PhD Candidate)
Research Fellow
Università di Napoli "L'Orientale"
mail: enzo.ccc@xxxxxxxxx
cell: +393495087014
_______________________________________________
Postgresql-it mailing list
Postgresql-it@xxxxxxxxxxxxx
http://lists.psql.it/mailman/listinfo/postgresql-it