2017-01-14 4 views
0

Je veux convertir des lignes en colonne dans PostgreSQL.Je veux toutes les variables par rapport à leur identifiant respectif, mais cela ne fonctionne pas.Convertir des lignes en colonnes dans PostgreSQL

enter image description here

Résultats escomptés:

myvar desc fname lname  sdate   edate   id  
title1 desc1 cina jhon 1483920000000 1484524800000  14 
title2 desc2 jhon lname2 1483920000000 1483910000000  16 
title3 desc3 diesel zier 1483920000000 1484524800000  17 



SELECT * FROM crosstab(
'SELECT name, value, id FROM test ORDER BY id') AS (
"myVar" text, "desc" text, "fname" text, "lname" text,"sdate" text,"edate" text, "value" text ,"containerid" bigint); 

Erreur: ERREUR: type de retour non valide d'état SQL: 42601 Détail: rowid données SQL ne correspond pas à retourner rowid type de données.

+0

ce qui est le résultat attendu? – McNets

+0

J'ai une question d'édition. – nagi

+0

Veuillez saisir ce graphique. Ne collez pas d'images. Tapez juste 'TABLE test;' et mettez cette sortie ici. Encore mieux, si vous vous souciez vraiment et que vous voulez upvotes .. Collez le DDL. 'CREATE TABLE AS SELECT' et vous obtiendrez de la joie. –

Répondre

0

Peut-être que cela peut aider.

ORDER BY 1,2 est requis ici.

select * 
    from crosstab (
     'select id, name, value 
     from tt1 
     order by 1,2') 
    AS (row_name int, col1 text, col2 text, col3 text, col4 text); 

+----------+-------+--------+--------+--------+ 
| row_name | col1 | col2 | col3 | col4 | 
+----------+-------+--------+--------+--------+ 
| 14 | desc1 | chen | john | title1 | 
+----------+-------+--------+--------+--------+ 
| 15 | desc2 | fname2 | lname2 | title2 | 
+----------+-------+--------+--------+--------+ 
| 16 | desc4 | deiser | ziel | title3 | 
+----------+-------+--------+--------+--------+ 

En fait, les colonnes devraient être nommées comme: col1, col2, col3, col4, ...

Vérifiez ici: http://rextester.com/MFWAW58518

+0

Votre exemple fonctionne sans ordre par .... –

+1

@EvanCarroll écrire une réponse, mes connaissances sur le tableau croisé est limitée. – McNets

+0

Ainsi est le mien. Je reçois toujours ce que je veux mais ce n'est pas mon domaine fort. Vous êtes allé au-delà de ce que j'étais prêt à faire en tapant tout ce graphique. J'ai comme 0-tolérance pour cela. Je dessine la ligne à faire DDL avec du texte. Quoi qu'il en soit, continuez à creuser l'homme. C'est ainsi que nous nous améliorons nous-mêmes. Cela peut très bien concerner ORDER BY 1,2. Les docs le mentionnent. J'ai appris quelque chose. Je ne pouvais tout simplement pas l'observer avec votre Rexster. –