Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai une table qui contient par exemple trois champs : ID, User, Roles_ID.
Une deuxième qui contient les Roles : Roles_ID, Détail
Dans la table 1, un user peut avoir plusieurs roles, séparés par une virgule.
Exemple : "1; chr; 1,3,7", "2; bvh; 2,7", "3; lmh; 7"
Dans la table 2, les roles listés avec leurs id.
Exemple : "1; Sortir", "2; Rentrer", "3; Manger", "4; Dormir", "5; Travailler", "6; Voyager", "7; Etudier"
J'ai besoin d'une query qui me donne :
1 - Sortir - 1 (chr)
2 - Rentrer - 1 (bvh)
3 - Manger - 1 (chr)
4 - Dormir - 0 (-)
5 - Travailler - 0 (-)
6 - Voyager - 0 (-)
7 - Etudier - 3 (chr, bvh, lmh)
J'imagine que c'est tout bête, j'avais pensé à un JOIN mais je ne sais pas si le JOIN accepte autre chose qu'un = et si oui, comment le formuler.
D'avance merci pour votre aide !
Bon dimanche !
chr
Cool, sauf que l'on tourne en 9.1.4... c'est déjà mieux qu'en janvier, nous étions en début d'année à la 8.1 !
Pour ceux qui n'ont pas non plus la 9.2, j'ai utilisé un CASE WHEN dans le OVERLAPS :
(case when date_begin = '2014-06-30' then date_begin - interval '1 day' else date_begin end, case when date_end is null then '2014-06-30' else date_end ::date end)
Et ça fonctionne très bien, mais évidement c'est un peu plus long et moins facile pour le contrôle.
Merci encore !
Merci beaucoup, toujours aussi rapides, c'est cool !
Entre-temps je travaille sur les dates pour les comparer et, le cas échéant, réduire la date de début d'un jour.
En query seul ça fonctionne mais comme c'est imbriqué, c'est pas encore gagné, mais puisque j'ai réussi à faire fonctionner la sous-requête, rien n'est désespéré !
Encore merci !
Je mets le point résolu.
Bonjour,
De retour dans les query Postgresql, j'ai utilisé l'excellente fonction "OVERLAPS" comme suit :
where
(DATE '2014-06-01', DATE '2014-06-30') OVERLAPS
(c3.date_begin, case when c3.date_end is null then '2014-06-30' else c3.date_end end)
Par contre, j'ai un enregistrement où date_begin est '2014-06-30' et date_end '2014-08-25', cet enregistrement est exclu alors qu'il est dans ma range.
Aurai-je manqué un paramètre overlaps pour dire de prendre tout y compris les limites début, fin indiquées ?
Merci pour votre aide,
Chr
Bonjour,
Je recommence un peu de postgresql et je n'arrive pas à obtenir la liste des derniers contrats des employés. Pourtant la table contrat est simple et contient un id du contrat + un id de l'employé, j'essaie
select d.is, d.full_name, s.id, s.date from employee d
where
d.id = (select max(S.id) from contrats C
left join employee S on (C.dossier_id = C.id))
le résultat de me renvoie pas de lignes....
Merci pour votre aide,
CHR
Bonsoir, toujours la newbie et je prépare ce soir un query super simple :
select distinct * from partner.partner p
INNER JOIN hr.hr_contrat h ON h.collab_id = p."id"
where extract(year from h.birth_date) < '2014'
group by ....
ça fonctionne sauf que comme je fais un lien sur une table qui contient de multiples enregistrements pour le même id, j'ai quand même plusieurs lignes.
je pensais solutionner la question avec un group by mais... j'ai pas envie d'écrire la liste nombreuse de champs qui compose la table partner !
Vous avez une idée pour m'aider ?
Merci,
chr
Bonjour,
Je travaille toujours sur un projet de reporting et j'ai toutes mes réponses sur la connexion ODBC, la seule question est: comment ne pas utiliser un utilisateur qui voit tout !
Oui, j'ai essayé de créer un user lambda "rep" (pour reporting) et dans la base de créer un schéma "reporting" dans lequel j'ai mis des vues qui elles appartiennent à postgresql et donc peuvent interroger les objets sans restriction.
Je grant les droits select à "rep" sur ce shéma et j'essaie de l'utiliser depuis XL via mes drivers ODBC mais il apparaît que comme "rep" n'a pas de droit sur les sous objets, il ne lui est pas possible de voir le contenu de cette vue... ce doit être du basic (je suis toujours newbie) mais si vous aviez une piste de résolution, ce serait top pour moi.
Merci !
Bonne soirée,
chr
Bonjour,
J'ai eu la réponse à ma question, en fait c'était plutôt du côté XL car il suffisait de mettre plusieurs "variables", soit "?" et de pointer vers la même cellule.
Sinon, pour le ou tout ou le filtre, le développeur m'a donné la proposition suivante (variable=-1 ou variable=x), comme les deux sont retranscrits dans XL comme (variable=? ou variable=?), je pointe les deux ? sur la même cellule et je saisis "-1" lorsque je souhaite ne pas avoir de filtres... coool.
Je mets donc le point en [RESOLU]
Prochain post sur les questions de droits... je ne sais pas si ce sera le lieu où si je trouve un topic plus approprié.
A bientôt ;-)
Si je prends la base tuto, pagila, j'imagine que je souhaite interroger la table film sur le champs rental_duration:
Select title, description, release_year where rental_duration in(?)
le ? est interprété par MS-Query (via Excel) comme un paramètre que l'utilisateur devra saisir. Une fois je veux toutes les lignes où le rental_duration est 3, une autre fois toutes celles où il est 3 et 7 et une autre fois encore toutes les lignes quel que soit la durée.
Comment écrire la requête pour que le "in" renvoie selon le cas, le 1 ou n critères ou toutes les données. Sachant que postgresql attends les multi-arguments entre apostrophe et séparés par des virgules (in('3', '6', '7')), comment coder la requête pour passer ces n arguments de l'interface ou utilisateur et quel argument donner lorsque le in doit contenir toutes les occurrences ?
Je sais, c'est une question de newbie mais... malheureusement j'en suis une !
Et encore une fois merci et chapeau pour votre suivi du forum qui est excellent, ça donne envie de passer le cap de la newbie !!
pas vraiment, ms query permet seulement le "?", la question est de comment transmettre ou poser un multi-query à postgresql. Une seule variable, multiple statements, c'est comment ?
Bonsoir,
Mon problème c'est que je vous ai soumis trois requêtes qui fonctionnent parfaitement individuellement mais que je ne sais pas comment traiter ces 3 cas dans une seule requête et un seul ? (ms-query paramètre).
Plus précisément, je ne sais pas comment transformer ou créer une requête qui EN MEME TEMPS puisse ramener tous les enregistrements (pas de WHERE condition - cas 3), plusieurs filtres (IN(xx) selection - cas 2) et une condition (= cas 1).
Merci pour votre aide et bonne soirée,
chr
Bonjour à tous, encore une petite question...
J'ai une requête que je récupère dans XL (ODBC + MS-QUERY) et qui fonctionne très bien, simplement j'ai un souci avec la syntaxe du query lorsque je veux récupérer toutes les données, un peu comme si je n'avais pas mis la condition.
Par exemple:
SELECT * from job.job_contrats where job.job_contrats.type_id = '1'
peut devoir devenir
SELECT * from job.job_contrats where job.job_contrats.type_id in('1','12','14')
voire
SELECT * from job.job_contrats
si l'utilisateur veut voir tous les types de contrats
Merci pour l'aide si vous avez une idée.
chr
Cool, ça fonctionne si l'on met les noms, les alias, les ordres justes !
Merci encore pour votre aide :-)
c'est bien une autre erreur qui ressort... j'ai l'impression que ça tourne en boucle car l'ordre n'est pas le bon...
[Err] ERROR: missing FROM-clause entry for table "hr_contrat"
LINE 28: inner JOIN job.hr_contrat_type ON hr_contrat.type_...
J'essaie de suite et vous dit le résultat !
(cela dit... c'est le forum où - tous domaines confondus - j'ai eu les réponses les plus rapides, merci !)
Bonsoir,
Toujours en train d'essayer de sortir de l'état de newbie PostGresql, voici mon nouveau défi en cette réponse sibylline du système :
[Err] ERROR: relation "g" does not exist
alors que l'alias g est défini dans la clause FROM, par contre, comme elle est aussi utilisée dans le join, j'ai un doute si je dois utiliser "INNER JOIN g ON..." car j'ai l'impression que ce "g" n'est pas compris ou bien... j'avoue que j'ai du mal à m'y mettre.. oops.
Merci pour votre aide et bonne soirée
SELECT
job.job_departement.departement_name as "Département",
p.partner_firstname as "Prénom",
p.partner_lastname as "Nom",
array_agg(g.contrat_taux) as "Taux",
p.collab_initials as "Initiales",
p.partner_tel_prof as "Tel",
p.partner_mail_prof as "Mail",
array_agg(job.hr_contrat_type.type_name) as "Types de Contrats",
job.hr_function.function_name,
job.job_departement.departement_cc_account,
min(contrat_begin) as "Première date",
max(contrat_end) as "Dernier contrat",
(select count(*) from job.hr_contrat where job.hr_contrat.id = p.id) as NbTous,
max(g.id),
array_agg(job.hr_function.function_name)
FROM partner.partner p, job.hr_contrat as g
INNER JOIN job.hr_contrat_type ON g.type_id = job.hr_contrat_type."id"
INNER JOIN g ON g.collab_id = p."id"
INNER JOIN job.hr_function ON g.function_id = job.hr_function."id"
INNER JOIN job.job_departement ON job.hr_contrat.departement_id = job.job_departement."id"
group by job.job_departement.departement_name,
p.partner_firstname,
p.partner_lastname,
p.collab_initials,
p.partner_tel_prof,
p.partner_mail_prof,
job.hr_function.function_name,
job.job_departement.departement_cc_account
ORDER BY job.job_departement.departement_name ASC, p.partner_firstname ASC;
Merci pour vos précieuses réponse et bonne suite !
Je viens de réaliser que le serveur sur lequel je voulais utiliser les solutions que vous m'avez proposées est dans la version 8.3.19 et que cette version n'inclut pas le fenêtrage... les over (PARTITION BY sont donc inutilisables, je ne sais pas si nous avons prévu de migrer et vu les soucis annoncés pour passer la 8.3, bref, auriez-vous une alternative à cette solution qui soit utilisable dans la 8.3.19 ?
D'avance merci,
chr
Impressionnée par les administrateurs de ce site, ça fonctionne parfaitement bien.
Que 2014 vous apporte des questions sympa et plein de bonnes choses et encore MERCI pour l'aide !
merci ! Et si je souhaite obtenir le titre lié au plus film_id ?
Merci encore pour la réponse super rapide à mon premier post tout à l'heure et puisque j'y ai aussi planché sans grand succès, toujours sur pagila mais cette fois sur la table film où je souhaiterai obtenir le premier titre disponible pour chacun des ratings existants (G, PG-13, NC-17). Dans MS-Access j'utilise la fonction d'agrégation "last(title)" mais je sais que "last" n'existe pas dans pg.
rating Nb Title (film_id)
G 200 Bunch Minds (107)
PG-13 187 Butch Panther (108)
NC-17 299 Cabin Flash (110)
Voilà et encore merci pour votre aide,
chr
Ça devrait ressembler à ceci :
SELECT DISTINCT ON (staff_id, extract(month FROM payment_date)) staff_id, extract(month FROM payment_date), count(*) over (PARTITION BY staff_id, extract(month FROM payment_date)) AS TotMois, count(*) over (PARTITION BY staff_id) AS Total, count(*) over () AS TotGeneral FROM payment;
Génial !!! Plus que ressembler, c'est EXACTEMENT ça... et dire que j'ai cherché pendant des heures, merci !!!!
Merci !
J'ai utilisé la BD pagila et la table payment, seule différence c'est que j'ai utilisé EXTRACT(month from payment_date) pour obtenir le mois et que j'ai le chiffre et non l'abréviation du mois. Mais je prépare une table pour le post.
Bonjour fully newbie dans le monde de Postgresql j'essaie d'obtenir le résultat suivant:
Staff_ID Mois TotMois Total TotGeneral
1 Jan 3 10 41
2 Jan 4 10 41
3 Jan 3 10 41
1 Fev 9 19 41
2 Fev 9 19 41
3 Fev 1 19 41
1 Mar 6 12 41
2 Mar 5 12 41
3 Mar 1 12 41
J'ai utilisé la BD d'exemple pagila (tutosql), la table ici comporterait 41 lignes, le but étant d'obtenir des sous-totaux (ici un count) dissociés en fonction de groupements ou de criètres à choix, ici Staff ID et Mois.
J'ai essayé les subquery (select dans un select) mais le hic est que la colonne Total renvoie toujours plusieurs lignes (évidement une par mois) et que donc la sous-requête me ramène une erreur...
Merci d'avance pour votre aide et bonne année !
chr
Pages : 1