2017-08-01 3 views
0

J'utilise une requête de tableau croisé pour mes données. Mais maintenant je dois filtrer la date en fonction de la date, puis la convertir en tableau croisé. Mais je pense que ce n'est pas possible. J'ai également lu la documentation de postgresql mais n'ai rien trouvé en rapport avec elle. Est-ce que quelqu'un peut confirmer cela? Ci-dessous est la requête que j'essaye de courir mais donne l'erreur:requête de tableau croisé peut avoir une date dans où condition?

SELECT * FROM crosstab('SELECT a.name, al.type, COALESCE(sum(a.amt),0) as amt FROM account a where date(a.vdate)>='07-30-2017' and date(a.vdate)<='08-31-2017' group by a.name, a.type order by a.name',$$VALUES ('type1'), ('type2')$$) AS ct ("name" text, "type1" decimal, "type2" decimal)) 

Quand j'emploie sans date dans où partie cela fonctionne.

Merci d'avance.

+0

Avez-vous essayé double indiquant la date de filtrage? 'SELECT * FROM crosstab ('CHOISIR un.nom, al.type, COALESCE (somme (a.amt), 0) comme amt FROM compte a où date (a.vdate)> =' '07-30-2017' 'et date (a.vdate) <=' '08-31-2017' 'groupe par a.name, a.type ordre par a.name', $$ VALUES ('type1'), ('type2') $ $) AS ct ("nom" texte, "type1" décimal, "type2" décimal)) ' –

+0

Merci beaucoup :) cela a fonctionné. – charmi

Répondre

2

Utilisez dollar guillemets pour la première requête comme vous avez fait pour la seconde:

SELECT * 
FROM crosstab($$ 
    SELECT a.name, a.type, COALESCE(sum(a.amt),0) as amt 
    FROM account a 
    WHERE date(a.vdate)>='07-30-2017' and date(a.vdate)<='08-31-2017' 
    GROUP BY a.name, a.type 
    ORDER BY a.name 
    $$, 
    $$ 
    VALUES ('type1'), ('type2') 
    $$ 
) AS ct ("name" text, "type1" decimal, "type2" decimal); 
+0

Merci beaucoup :) ça a marché. – charmi

+0

Puis-je ajouter une variable au lieu d'une date statique? – charmi

+0

Essentiellement, postgresql ne connaît pas de variables. Bien sûr, vous pouvez appliquer des variables dans votre programme client lors de la génération de la requête, ou vous pouvez utiliser une table auxiliaire, selon ce que vous attendez. Je pense que vous pourriez poser une nouvelle question avec une description plus détaillée de la question. – klin