J'essaie de créer une vue de type de table pivot dans PostgreSQL et je suis presque là! Voici la requête de base: et les données: p> Ce que j'essaie d'obtenir est ce qui suit: p> ERROR: function first(character varying) does not exist
6 Réponses :
SELECT atn.acc, ts.name AS species, tp.name AS phylum FROM acc2tax_node atn LEFT JOIN tax_node ts ON ts.taxid = atn.taxid AND ts.rank = 'species' LEFT JOIN tax_node tp ON tp.taxid = atn.taxid AND tp.rank = 'phylum' WHERE atn.acc = 'AJ012531 '
Autres informations à la demande (dans une réponse plutôt qu'un commentaire pour Beau formatage):
SELECT * FROM acc2tax_node WHERE acc = 'AJ012531'; acc | taxid ----------+-------- AJ012531 | 66400 AJ012531 | 66399 AJ012531 | 39216 AJ012531 | 39215 AJ012531 | 166235 AJ012531 | 166384 AJ012531 | 6157 AJ012531 | 33214 AJ012531 | 33213 AJ012531 | 6072 AJ012531 | 33208 AJ012531 | 33154 AJ012531 | 2759 AJ012531 | 131567
postgreSQL a quelques fonctions pour les requêtes de pivotement, voir cet article sur postgresonline . Vous pouvez trouver ces fonctions dans le PRT . P>
Oui, je soupçonne que la bonne façon de le faire est avec Scosstab. J'aimerais toujours comprendre ce que je fais mal ici pour mes propres études.
Utilisez max () ou min (), pas d'abord (). Dans ce scénario, vous aurez toutes les nuls dans la colonne par chaque valeur de groupe, sauf pour, au plus, une avec une valeur NON NULL. Par définition, il s'agit à la fois du min et du max de cet ensemble de valeurs (toutes les nulls sont exclus). P>
Cela fonctionne parfaitement, merci. Pour une raison quelconque, j'ai supposé que max () ne fonctionnerait pas parce que j'utilisais des valeurs de chaîne.
Exécuter:
SELECT report.* FROM crosstab( select acc2tax_node.acc, tax_node.name, tax_node.rank from tax_node, acc2tax_node where tax_node.taxid=acc2tax_node.taxid and acc2tax_node.acc='AJ012531'; ) AS report(species text, enus text, family text, ...)
Comme Matthew Wood a souligné, utilisez min () ou max (), pas d'abord ():
Pourriez-vous poster les résultats de cette requête:
Sélectionnez * à partir d'Acc2Tax_node où ACC = 'AJ012531' CODE>?