Cet article vous aidera à personnaliser les rapports SQL avec différentes fonctions. On y apprend comment ajouter des hyperliens dans un rapport, comment extraire l’information de champs MARC spécifiques, comment ajouter un menu d’options dans la page d’exécution du rapport et comment ajouter un tri de résultats.
Informations MARC
Toutes les informations MARC sont dans la table biblio_metadata. Assurez-vous que celle-ci soit dans votre section « FROM ».
Lieu de publication (008/15-17)
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 16,3 )
Exemples d'utilisations
Rapport pour obtenir une liste de titres et le lieu de publication
SELECT
title AS "Titre",
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 16,3 )
AS "Lieu de publication"
FROM
biblio
LEFT JOIN biblio_metadata USING (biblionumber)
Rapport pour sortir les titres des notices qui ont « quc » dans le lieu de publication
SELECT title AS "Titre" FROM biblio_metadata LEFT JOIN biblio USING (biblionumber) WHERE SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 16,3 ) = "quc"
Lieu de publication (264 $a)
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="a"]')
Exemples d'utilisations
Rapport pour obtenir une liste de titres et le lieu de publication
SELECT title AS "Titre", ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="a"]') AS "Lieu de publication" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber)
Rapport pour obtenir la liste de titres dont le lieu de publication est (contient) Montréal
SELECT title AS "Titre", ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="a"]') AS "Lieu de publication" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) WHERE ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="a"]') LIKE "%Montréal%"
Langue (008/35-37)
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 )
Exemples d'utilisations
Rapport pour obtenir une liste de titres et la langue
SELECT
title AS "Titre",
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 )
AS "Langue"
FROM
biblio
LEFT JOIN biblio_metadata USING (biblionumber)
Rapport qui montre les notices dont la langue dans la zone 008 n’est pas la même que dans la zone 041$a
SELECT title AS "Titre", SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) AS "Langue (008)", ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]') AS "Langue (041a)" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) WHERE SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) != ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]')
Éditeur (264 $b)
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="b"]')
Exemples d'utilisations
Rapport pour obtenir le nombre de notices par éditeur
SELECT ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="b"]') AS "Éditeur", count(*) AS "Nombre de notices" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) GROUP BY ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="b"]')
Rapport pour obtenir la liste de titres dont l’éditeur est La courte échelle (contient « courte échelle »)
SELECT title AS "Titre", ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="b"]') AS "Éditeur" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) WHERE ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="b"]') LIKE "%courte échelle%"
Année de publication (008/07-10)
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 8,4 )
Exemples d'utilisations
Rapport pour obtenir une liste de titres et l’année de publication
SELECT
title AS "Titre",
SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 8,4 )
AS "Année de publication"
FROM
biblio
LEFT JOIN biblio_metadata USING (biblionumber)
Année de publication (264$ c)
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="c"]')
Exemples d'utilisations
Rapport pour obtenir une liste de tous titres et leurs dates de publication 264$ c
SELECT
biblionumber,
title AS "Titre",
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="c"]') AS "Date de publication 264c"
FROM
biblio
LEFT JOIN biblio_metadata USING (biblionumber)
Rapport pour obtenir la liste des titres de l’année de publication 2024 (contient « 2024 »)
SELECT
biblionumber,
title AS "Titre",
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="c"]') AS "Éditeur"
FROM
biblio
LEFT JOIN biblio_metadata USING (biblionumber)
WHERE
ExtractValue(metadata, '//datafield[@tag="264"]/subfield[@code="c"]') LIKE "%2024%"
Ajouter des liens
Des liens seront automatiquement créés vers les notices bibliographiques, les exemplaires, ou les utilisateurs si la colonne contient des biblionumbers, itemnumbers, borrowernumbers, ou cardnumbers.
La colonne DOIT s’appeler biblionumber, itemnumber, borrowernumber, ou cardnumber.
Lien vers la notice bibliographique
Une colonne « biblionumber » affichera un menu pour voir ou modifier la notice bibliographique correspondante.
SELECT biblionumber,
title,
author
FROM biblio
Lien vers l’exemplaire
Une colonne « itemnumber » affichera un menu pour voir ou modifier l’exemplaire correspondant.
SELECT itemnumber,
barcode,
dateaccessioned
FROM items
Bien que les étiquettes mentionnent les « notices », ce sont bien des liens pour voir et modifier les exemplaires.
Lien vers l’utilisateur
Une colonne « borrowernumber » affichera un menu pour voir le dossier de l’utilisateur correspondant, modifier ce dernier, ou faire un prêt.
SELECT borrowernumber,
surname,
firstname
FROM borrowers
Une colonne « cardnumber » offrira l’option de faire un prêt à l’utilisateur correspondant.
SELECT cardnumber,
surname,
firstname
FROM borrowers
Ancienne méthode (version 21.11 et moins)
Dans la version 21.11 et les précédentes, il était nécessaire de créer les liens avec des concaténations.
Dans l’interface des rapports de Koha, il est possible d’ajouter des liens pour aller vers une notice ou un dossier d’utilisateur. Cela ne donne toutefois pas de bons résultats si vous exportez le résultat du rapport dans un tableur par exemple.
Les liens doivent être dans la section SELECT du rapport.
Lien vers la notice
CONCAT('<a href=\"cgi-bin/koha/catalogue/detail.pl?biblionumber=', biblionumber, '\">Voir la notice</a>')
Exemple d’utilisation
Rapport qui montre les notices dont la langue dans la zone 008 n’est pas la même que dans la zone 041$a, avec lien vers la notice
SELECT title AS "Titre", SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) AS "Langue (008)", ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]') AS "Langue (041a)", CONCAT('<a href=\"cgi-bin/koha/catalogue/detail.pl?biblionumber=', biblionumber, '\">Voir la notice</a>') AS "" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) WHERE SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) != ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]')
Lien vers la modification de la notice
CONCAT('<a href=\"/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=', biblionumber, '\">Modifier la notice</a>')
Exemple d’utilisation
Rapport qui montre les notices dont la langue dans la zone 008 n’est pas la même que dans la zone 041$a, avec lien vers la modification de la notice
SELECT title AS "Titre", SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) AS "Langue (008)", ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]') AS "Langue (041a)", CONCAT('<a href=\"cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=', biblionumber, '\">Modifier la notice</a>') AS "" FROM biblio LEFT JOIN biblio_metadata USING (biblionumber) WHERE SUBSTRING( ExtractValue(metadata,'//controlfield[@tag="008"]'), 36,3 ) != ExtractValue(metadata, '//datafield[@tag="041"]/subfield[@code="a"]')
Lien vers la modification de l’exemplaire
CONCAT('<a href=\"/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=', biblionumber, '&itemnumber=', itemnumber, '#edititem', '\">Modifier l\'exemplaire</a>')
Exemple d’utilisation
Liste de titres et cotes (090 $a et exemplaire), avec lien vers la modification de l’exemplaire
SELECT title AS "Titre", Extractvalue(metadata, '//datafield[@tag="090"]/subfield[@code="a"]') AS "Cote 090$a", itemcallnumber AS "Cote (exemplaire)", CONCAT('<a href=\"/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=', biblionumber, '&itemnumber=', itemnumber, '#edititem', '\">Modifier l\'exemplaire</a>') FROM items LEFT JOIN biblio USING (biblionumber) LEFT JOIN biblio_metadata USING (biblionumber)
Lien vers le dossier de l’usager
CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=', borrowernumber, '\">Voir dossier</a>') AS ""
Exemple d’utilisation
Rapport des utilisateurs qui n’ont pas de garant, avec choix de catégorie d’utilisateur et lien vers le dossier de l’usager
SELECT cardnumber AS "Numéro de carte", surname AS "Nom de famille", firstname AS "Prénom", dateofbirth AS "Date de naissance", CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=', borrowernumber, '\">Voir dossier</a>') AS "" FROM borrowers WHERE categorycode = <<Catégorie d'utilisateur |categorycode>> AND guarantorid IS NULL
Ajouter des choix
Koha permet de choisir des variables au moment d’exécuter le rapport. Ceci permet de faire un seul rapport qui pourra servir pour plus qu’une utilisation.
Le principe des choix est de mettre le texte qui sera affiché, suivi d’une barre verticale (ou pipe en anglais), |, puis de la liste de choix, et ce, entre double chevrons (<< et >>).
Ces choix doivent être dans la section WHERE du rapport.
Pour insérer un choix, placez le curseur à l’endroit du rapport où vous voulez insérer la variable (dans la section WHERE), puis cliquez sur le bouton « Insérer un choix » et choisissez la variable à insérer.
Un formulaire apparaîtra pour changer l’étiquette du choix, ainsi que les paramètres du choix.
Les options du paramètre permettent de déterminer ce qui sera offert comme options à l’utilisateur qui exécute le rapport.
Paramètre unique seulement : lorsqu’on exécute le rapport, on pourra choisir une option parmi la liste. Dans ce cas, la clause WHERE devrait utiliser l’opérateur « = ».
SELECT itemcallnumber,
title,
author,
location
FROM items
LEFT JOIN biblio USING (biblionumber)
WHERE homebranch = <<Bibliothèque|branches>>
Inclure une option « Tous » : lorsqu’on exécute le rapport, on pourra choisir une option parmi la liste et cette liste incluera une option « Tous ». Dans ce cas, la clause WHERE devrait utiliser l’opérateur « LIKE ».
SELECT itemcallnumber,
title,
author,
location
FROM items
LEFT JOIN biblio USING (biblionumber)
WHERE homebranch LIKE <<Bibliothèque|branches:all>>
Autoriser des sélections multiples : lorsqu’on exécute le rapport, on pourra sélectionner plusieurs options parmi la liste en maintenant la touche Ctrl enfoncée. Dans ce cas, la clause WHERE devrait utiliser l’opérateur « IN ».
SELECT itemcallnumber,
title,
author,
location
FROM items
LEFT JOIN biblio USING (biblionumber)
WHERE homebranch IN <<Bibliothèque|branches:in>>
Ancienne méthode (version 20.11 et moins)
Dans la version 20.11 et les précédentes, il était nécessaire de taper manuellement les codes pour les choix.
Le principe des choix est de mettre le texte qui sera affiché, suivi d’une barre verticale (ou pipe en anglais), |, puis de la liste de choix, et ce, entre double chevrons (<< et >>). La liste de choix peut être un liste de valeurs autorisées :
- LOC pour les localisations
- CCODE pour les codes de collection
- LOST pour les statuts « perdu »
- DAMAGED pour les statuts « endommagé »
- WITHDRAWN pour les statuts « élagué »
- NOT_LOAN pour les statuts de prêt
- ou toute autre liste de valeurs autorisées dans votre système
ou une des listes prédéfinies suivantes :
- branches pour les bibliothèques
- categorycode pour les catégories d’utilisateur
- itemtypes pour les types de document
- date donnera un petit calendrier pour choisir une date
Par exemple, <<Bibliothèque |branches>> affichera
Alors que <<Choisir la bibliothèque |branches>> affichera
Ces choix doivent être dans la section WHERE du rapport.
Choix de bibliothèque
<<Bibliothèque |branches>>
Exemples d’utilisation
Rapport pour obtenir la liste des utilisateurs expirés par bibliothèque
SELECT cardnumber AS "Numéro de carte", surname AS "Nom de famille", firstname AS "Prénom", dateexpiry AS "Date d'échéance" FROM borrowers WHERE dateexpiry <= CURDATE() AND branchcode = <<Bibliothèque |branches>>
Rapport pour obtenir la liste des documents perdus par bibliothèque et par localisation
SELECT title AS "Titre", itemlost_on AS "Perdu le", itemcallnumber AS "Cote" FROM items LEFT JOIN biblio USING (biblionumber) WHERE holdingbranch = <<Bibliothèque |branches>> AND location = <<Localisation |LOC>> AND itemlost != 0 ORDER BY cn_sort
Choix de catégorie d’utilisateur
<<Catégorie d'utilisateur |categorycode>>
Exemple d’utilisation
Rapport pour obtenir la liste des utilisateurs expirés par catégorie
SELECT cardnumber AS "Numéro de carte", surname AS "Nom de famille", firstname AS "Prénom", dateexpiry AS "Date d'échéance" FROM borrowers WHERE dateexpiry <= CURDATE() AND categorycode = <<Catégorie d'utilisateur |categorycode>>
Choix de type de document
<<Type de document |itemtype>>
Exemple d’utilisation
Rapport pour créer une liste de titre par type de document
SELECT biblio.title AS "Titre", items.itemcallnumber AS "Cote", biblio.seriestitle AS "Collection", items.itype AS "Type de document", items.location AS "Localisation", items.barcode AS "Code-barres" FROM items LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber) LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber) WHERE items.homebranch=<<Bibliothèque|branches>> AND items.itype=<<Type de document|itemtypes>> ORDER BY items.barcode asc
Choix de dates (entre le … et le…)
BETWEEN << Date début(aaaa-mm-dd)|date>> AND << jusqu'au|date>>
Exemple d’utilisation
Rapport qui identifie une liste des nouveaux abonnés selon la date d’inscription
SELECT surname AS "Nom", firstname AS "Prénom", city AS "Ville", categorycode AS "Catégorie d'utilisateur", dateenrolled AS "Date d'inscription", dateexpiry AS "Date d'expiration" FROM borrowers WHERE DATE(dateenrolled) BETWEEN << Date début(aaaa-mm-dd)|date>> AND << jusqu'au|date>> ORDER BY dateenrolled, categorycode, surname ASC
Ajouter un tri de résultats
ORDER BY ...
Un simple ajout d’une fonction « ORDER BY » permet de trier les résultats directement dans le rapport SQL.
Exemples d'utilisations
Pour ajouter un tri de résultats, inscrire à la fin du rapport «ORDER BY» + [nom du champ] + type de tri
Les résultats peuvent être triés selon:
- ASC : ordre croissant (ex. A Ã Z, ou 0 Ã 9)
- DESC : ordre décroissant (ex. Z à A, ou 9 à 0)
Dans cet exemple de rapport, on utilise la fonction «ORDER BY» pour trier les résultats en ordre croissant de codes-barres (voir la dernière portion du rapport)
ORDER BY
items.barcode asc
SELECT biblio.title AS "Titre", items.itemcallnumber AS "Cote", biblio.seriestitle AS "Collection", items.itype AS "Type de document", items.location AS "Localisation", items.barcode AS "Code-barres" FROM items LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber) LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber) WHERE items.homebranch=<<Bibliothèque|branches>> AND items.itype=<<Type de document|itemtypes>> ORDER BY items.barcode asc
pour obtenir un tri en ordre décroissant, remplacer «asc» par «desc»
ORDER BY items.barcode desc
Voir aussi
- Définition des champs de base de données
- Obtenir la liste de notices ayant une certaine valeur dans une zone MARC spécifique
- Obtenir la liste de notices d’autorité ayant une certaine valeur dans une zone MARC spécifique
- Rapport SQL: comment identifier tous les numéros de carte (par catégorie d’usager)
Ressources de la communauté Koha
- SQL Reports Library (anglais)
- Query MARC (SQL reports library) (anglais)
- Links (SQL reports library) (anglais)
- Runtime parameters (SQL reports library) (anglais)
- Schéma de la base de données (anglais)