Bonjour à tous,
Quasi débutant SQL, je ne parviens pas à trouver comment rédiger une requête pour
faire apparaitre en clair les valeurs d'un champ de type "sélecteur à choix
multiples".Exemple : j'ai un champ "moyen de règlement" qui peut
prendre les valeurs "Chèque" ou "Virement". Cela se traduit dans la
table par les valeurs 1 ou 2.Comment éditer les valeurs en clair ?
Merci de votre aide.Bonne journée,
Serge
Le 11/01/2024 à 11:20, garreau.serge at yahoo.fr via aide a écrit :
> Bonjour à tous,
>
> Quasi débutant SQL, je ne parviens pas à trouver comment rédiger une requête
> pour faire apparaitre en clair les valeurs d'un champ de type
"sélecteur à choix
> multiples".
> Exemple : j'ai un champ "moyen de règlement" qui peut prendre les
valeurs
> "Chèque" ou "Virement". Cela se traduit dans la table par les
valeurs 1 ou 2.
> Comment éditer les valeurs en clair ?
Est-ce qu'un truc comme ceci répond à la question ?
SELECT
CASE moyen
WHEN 1 THEN "Chèque"
WHEN 2 THEN "Virement"
END AS "Moyen de règlement"
FROM table
en supposant que le champ s'appelle moyen...
Jean-Christophe Engel
> Est-ce qu'un truc comme ceci répond à la question ?
>
> SELECT
> CASE moyen
> WHEN 1 THEN "Chèque"
> WHEN 2 THEN "Virement"
> END AS "Moyen de règlement"
> FROM table
C'est plus compliqué, la valeur est stockée sous forme de bits :
https://fr.wikipedia.org/wiki/Op%C3%A9ration_bit_%C3%A0_bit
Il faudrait plutôt quelque chose comme ceci :
CASE WHEN moyen & (1 << 0) THEN "Oui" ELSE NULL END AS choix_1,
CASE WHEN moyen & (1 << 1) THEN "Oui" ELSE NULL END AS choix_2,
CASE WHEN moyen & (1 << 2) THEN "Oui" ELSE NULL END AS choix_3,
etc.
C'est pour ça qu'il n'est pas possible de restituer cette valeur en
dehors d'une recherche avancée.
Un grand merci ainsi qu'à Jean-Christophe pour avoir pris le temps de répondre.Ce
n'est pas très "sexy" mais au moins çà a le mérite de répondre à la
question :
SELECT moyen_de_reglement_cotisation as "Code",
CASE WHEN moyen_de_reglement_cotisation & (1 << 0) THEN "Chèque" ELSE
NULL END AS choix_1,
CASE WHEN moyen_de_reglement_cotisation & (1 << 1) THEN "Virement"
ELSE NULL END AS choix_2,
COUNT(moyen_de_reglement_cotisation) as Nombre
FROM users
group by moyen_de_reglement_cotisation
N'y a-t-il pas de solution pour que les valeurs en clair du sélecteur figurent dans
la même colonne ?
Bonne soirée,
Serge
Le jeudi 11 janvier 2024 à 16:03:50 UTC+1, BohwaZ/Paheko <bohwaz@paheko.cloud>
a écrit :
> Est-ce qu'un truc comme ceci répond à la question ?
>
> SELECT
> CASE moyen
> WHEN 1 THEN "Chèque"
> WHEN 2 THEN "Virement"
> END AS "Moyen de règlement"
> FROM table
C'est plus compliqué, la valeur est stockée sous forme de bits :
https://fr.wikipedia.org/wiki/Op%C3%A9ration_bit_%C3%A0_bit
Il faudrait plutôt quelque chose comme ceci :
CASE WHEN moyen & (1 << 0) THEN "Oui" ELSE NULL END AS choix_1,
CASE WHEN moyen & (1 << 1) THEN "Oui" ELSE NULL END AS choix_2,
CASE WHEN moyen & (1 << 2) THEN "Oui" ELSE NULL END AS choix_3,
etc.
C'est pour ça qu'il n'est pas possible de restituer cette valeur en
dehors d'une recherche avancée.
> N'y a-t-il pas de solution pour que les valeurs en clair du sélecteur
> figurent dans la même colonne ?
Je viens de réfléchir un peu et de trouver une solution en rajoutant
deux fonctions SQL spécifiques à Paheko (qui ne marcheront donc qu'à
l'intérieur de Paheko) :
* print_dynamic_field('nom_du_champ', valeur) : affiche la valeur
du champ de la fiche membre, le premier paramètre doit être le nom du
champ entre guillemets, le second paramètre étant la valeur, donc le
nom de la colonne
* match_dynamic_field('nom_du_champ', valeur, 'valeur à chercher'[,
'seconde valeur à chercher',...]) : permet de ne lister que les
lignes dont le champ en premier paramètre correspond à une ou des
valeurs passées en 3ème paramètre et suivants
Exemples :
SELECT print_dynamic_field('moyen_paiement', u.moyen_paiement)
FROM users AS u
WHERE u.moyen_paiement IS NOT NULL;
SELECT print_dynamic_field('moyen_paiement', u.moyen_paiement)
FROM users AS u
WHERE match_dynamic_field('moyen_paiement', u.moyen_paiement,
'Espèces');
J'ai posté une doc plus complète ici :
https://paheko.cloud/fonctionnalites-sql-supplementaires
En espérant que ça réponde au besoin :)
Merci Bohwaz, c'est vraiment très sympa.
Hélas, pas vraiment de compétence SQL, je n'arrive pas à transcrire ce que tu
préconises, soit dans ton mail, soit dans la doc plus complète.
Si ce n'est pas abusé...
Ma requête :SELECT print_dynamic_field('moyen_de_reglement_cotisation',
u.moyen_de_reglement_cotisation)
FROM users as u
WHERE match_dynamic_field('moyen_de_reglement_cotisation',
u.moyen_de_reglement_cotisation, 'Virement', 'Chèque')
Le message d'erreur :Erreur dans la requête : The value "" is not an
integer
[]
Le "print_dynamic_fiels" fonctionne bien, mais rien à faire pour le
"match_dynamic_field.
Encore merci.
Bonne journée,
Serge
Le jeudi 11 janvier 2024 à 20:29:33 UTC+1, BohwaZ/Paheko <bohwaz@paheko.cloud>
a écrit :
> N'y a-t-il pas de solution pour que les valeurs en clair du sélecteur
> figurent dans la même colonne ?
Je viens de réfléchir un peu et de trouver une solution en rajoutant
deux fonctions SQL spécifiques à Paheko (qui ne marcheront donc qu'à
l'intérieur de Paheko) :
* print_dynamic_field('nom_du_champ', valeur) : affiche la valeur
du champ de la fiche membre, le premier paramètre doit être le nom du
champ entre guillemets, le second paramètre étant la valeur, donc le
nom de la colonne
* match_dynamic_field('nom_du_champ', valeur, 'valeur à chercher'[,
'seconde valeur à chercher',...]) : permet de ne lister que les
lignes dont le champ en premier paramètre correspond à une ou des
valeurs passées en 3ème paramètre et suivants
Exemples :
SELECT print_dynamic_field('moyen_paiement', u.moyen_paiement)
FROM users AS u
WHERE u.moyen_paiement IS NOT NULL;
SELECT print_dynamic_field('moyen_paiement', u.moyen_paiement)
FROM users AS u
WHERE match_dynamic_field('moyen_paiement', u.moyen_paiement,
'Espèces');
J'ai posté une doc plus complète ici :
https://paheko.cloud/fonctionnalites-sql-supplementaires
En espérant que ça réponde au besoin :)
> Erreur dans la requête : The value "" is not an integer []
> Le "print_dynamic_fiels" fonctionne bien, mais rien à faire pour le
> "match_dynamic_field. Encore merci. Bonne journée,
Effectivement la fonction ne s'attendait pas à recevoir une valeur NULL
(aucun choix sélectionné), j'ai corrigé, ça devrait être bon :)
Super !
... mais je n'arrive pas à utiliser la fonction "COUNT" avec cette
requête...
Le casse... pieds !
Serge
Le samedi 13 janvier 2024 à 13:48:49 UTC+1, BohwaZ/Paheko <bohwaz@paheko.cloud>
a écrit :
> Erreur dans la requête : The value "" is not an integer []
> Le "print_dynamic_fiels" fonctionne bien, mais rien à faire pour le
> "match_dynamic_field. Encore merci. Bonne journée,
Effectivement la fonction ne s'attendait pas à recevoir une valeur NULL
(aucun choix sélectionné), j'ai corrigé, ça devrait être bon :)