Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1583 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL basée sur paramètre et table un peu étrange

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête SQL basée sur paramètre et table un peu étrange

n°2223266
Titeeden
Posté le 26-03-2014 à 21:28:38  profilanswer
 

:hello: Bonsoir à tous!
 
Je vais solliciter votre aide si vous le voulez bien.
Pour resituer, je ne suis pas du tout informaticienne, mais on m'a demandé de concevoir des rapports RS. On m'avait expliqué que ce serait très simple : juste quelques select basiques... Sauf que...Non :non:  
Je dois faire un rapport RS listant des fiches et faisant de beaux camemberts en fonction de certains critères et les paramètres me sont envoyés directement par l'application (ils peuvent tous être multiples.)  
 
J'ai fait beaucoup de recherches et de tâtonnements pour arriver au résultat ci-dessous, mais il subsiste un problème de taille et je ne parviens pas à le résoudre.
Voici l'une de mes requetes
 

Citation :

 @Structure_Id nvarchar(max),
  @Datedebut nvarchar(10),
  @DateFin  nvarchar(10),
  @Entite nvarchar (Max)  
   
 
AS
BEGIN
 
SELECT
  SCNaturesContentieux.Libelle
  ,STRUCTURES.NAME_FR
  ,STRUCTURE_AMONT_ID
FROM
  SCFicheContentieux
  INNER JOIN SCNaturesContentieux
    ON SCFicheContentieux.NatureContentieux_Id = SCNaturesContentieux.NaturesContentieux_Id
  INNER JOIN SCFiche
    ON SCFicheContentieux.Fiche_Id = SCFiche.Fiche_Id
 INNER JOIN SCStructureSpecifique
 ON SCStructureSpecifique.CODE_SOCIETE in (LEFT(SCFiche.NumeroFiche,4))
INNER JOIN STRUCTURES
 ON STRUCTURES.STRUCTURE_ID = SCStructureSpecifique.Structure_Id
 
where convert(nvarchar,convert(datetime,right(@Datedebut,4) + substring(@Datedebut,4,2) + left(@Datedebut,2)),112) <= convert(nvarchar,SCFiche.CreationUserDate,112)  
   and convert(nvarchar,SCFiche.CreationUserDate,112) <= convert(nvarchar,convert(datetime,right(@DateFin,4) + substring(@DateFin,4,2) + left(@DateFin,2)),112)and  
   STRUCTURES.STRUCTURE_ID in (select Number from dbo.fn_SplitInt(@Structure_Id,',') as fn_SplitInt_1)
   and SCFiche.Statut = 'E'
End


 
Mon problème est le suivant :  
Les structures-Id ont des niveaux différents (organisation mère /sociétés / Uo / Directions )  mais sont toutes dans la même table avec une colonne Structure Amount Id qui permets de savoir qui est à quel niveau.
Sauf que l'application va m'envoyer des UO (si l'utilisateur choisit une société ou bien une UO) : Dans ce cas ma requête fonctionne
Mais elle peut aussi m'envoyer des sociétés (si l'utilisateur choisit l'organisation mère) = Alors là il m'envoie ce qui est directement en dessous de l'organisation mère, mais moi je ne récupère rien du tout puisque mes fiches sont identifiées par leur UO.  
 
Je n'ai malheureusement pas la main sur les tables (j'aurai aimé pouvoir ajouter une colonne Niveau), ni sur la façon dont on m'envoie les infos.
 
Ce qu'il me faudrait c'est que lorsque l'on m'envoie des sociétés (et alors comment les repérer à part que ce sont les seules à avoir Structure_Amount_Id = 1)  
Alors je transforme mes structures ID de niveau 2 en récupérant à la place toutes les Structures ID de niveau 3.
 
Donc si quelqu'un peut m'aider là dessus, il aura mon éternelle reconnaissance.
 
Désolée également pour mon manque de vocabulaire technique et pour explication peut-être confuse.
 
 
 
 
 

mood
Publicité
Posté le 26-03-2014 à 21:28:38  profilanswer
 

n°2223319
rufo
Pas me confondre avec Lycos!
Posté le 27-03-2014 à 11:03:29  profilanswer
 

Titeeden a écrit :

:hello: Bonsoir à tous!
 
Je vais solliciter votre aide si vous le voulez bien.
Pour resituer, je ne suis pas du tout informaticienne, mais on m'a demandé de concevoir des rapports RS. On m'avait expliqué que ce serait très simple : juste quelques select basiques... Sauf que...Non :non:


Technique classique en informatique pour faire faire un travail à qq'un. Quand la personne te dit des trucs du genre "c'est pas compliqué", "ça va être rapide", "c'est simple, c'est comme l'autre projet"... tu peux être sûr que c'est faux et que si tu acceptes, tu vas te faire avoir :D
 
 

Titeeden a écrit :


Mon problème est le suivant :  
Les structures-Id ont des niveaux différents (organisation mère /sociétés / Uo / Directions )  mais sont toutes dans la même table avec une colonne Structure Amount Id qui permets de savoir qui est à quel niveau.
Sauf que l'application va m'envoyer des UO (si l'utilisateur choisit une société ou bien une UO) : Dans ce cas ma requête fonctionne
Mais elle peut aussi m'envoyer des sociétés (si l'utilisateur choisit l'organisation mère) = Alors là il m'envoie ce qui est directement en dessous de l'organisation mère, mais moi je ne récupère rien du tout puisque mes fiches sont identifiées par leur UO.  
 
Je n'ai malheureusement pas la main sur les tables (j'aurai aimé pouvoir ajouter une colonne Niveau), ni sur la façon dont on m'envoie les infos.
 
Ce qu'il me faudrait c'est que lorsque l'on m'envoie des sociétés (et alors comment les repérer à part que ce sont les seules à avoir Structure_Amount_Id = 1)  
Alors je transforme mes structures ID de niveau 2 en récupérant à la place toutes les Structures ID de niveau 3.
 
Donc si quelqu'un peut m'aider là dessus, il aura mon éternelle reconnaissance.
 
Désolée également pour mon manque de vocabulaire technique et pour explication peut-être confuse.


De ce que je comprends, ta structure des sociétés et autres entités sont modélisées via une arborescence. En BD, y'a 2 façons de faire : avec l'ID du "parent" auquel il est rattaché, auquel cas, il faut faire des requêtes récursives pour calculer l'arbo et connaître le niveau de chaque "enfant". L'autre façon est la représentation intervallaire : dans ce cas, le parent a 2 champs (bornes droite et gauche) qui contiennent les ID min et max de tous ses enfants. Donc, en 1 requête SQL, il est facile de récupérer tous les enfants.
 
Si tu nous donnes pas le MCD ou le MLD de ta BD (champs de chaque table et relations entre elles), on va pas pouvoir trop t'aider :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2223360
Titeeden
Posté le 27-03-2014 à 15:34:53  profilanswer
 

Hello Rufo , Merci pour ta réponse.
 
 
J'ai préparé un. mpd mais je ne sais pas si je peux le transformer en un format + lisible et partageable ici.
 
Mais en gros dans ma table  
Structures  

  • Structures ID
  • Libelle
  • Structure Amount_ID


J'ai donc Organisation mère ID = 1 et structure-Amount_ID = null
Sociétés 2,3,4,5,6 ont pour Amount-Id 1  
En dessous des UO qui ont pour amount ID 2,3,4,5 ou 6
etc jusqu'au niveau Directions
 
Donc ça ressemble à la première méthode que tu as décrite

Citation :

En BD, y'a 2 façons de faire : avec l'ID du "parent" auquel il est rattaché, auquel cas, il faut faire des requêtes récursives pour calculer l'arbo et connaître le niveau de chaque "enfant".


 
Je vais donc aller faire quelques recherches sur les requêtes récursives ^^ On m'a aussi parlé de la possiblité de créer des vues ...
 [:alexmagnus]  
 
 
 
 
 
 
 

n°2223368
rufo
Pas me confondre avec Lycos!
Posté le 27-03-2014 à 16:07:16  profilanswer
 

Ben tu pourras pas couper aux requêtes récursives. je pense que tu devrais faire une procédure stockée pour calculer cette arbo à partir d'un ID (et que ça te récupère tous les ID enfants, avec leur niveau dans l'arbo).
Les vues pourront faire appel à cette procédure stockée. Perso, j'ai déjà implémenté en PHP cette façon de représenter une arbo d'éléments dans mes 2 softs Astres et Icare (cf ma signature). Si j'avais à faire le travail demandé, je l'aurais sûrement fait en PHP afin d'exporter les données dans un fichier CSV qui serait ensuite injecté dans un fichier Excel qui se chargerait de faire les graphiques ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2223696
xuan-khanh
...
Posté le 01-04-2014 à 15:06:09  profilanswer
 

Sans avoir lu tout les pavés, à tout hasard les requêtes hiérarchique ne ferait pas l'affaire ? (ça crée une pseudo colonne de "level" )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL basée sur paramètre et table un peu étrange

 

Sujets relatifs
Importer des données d'une table importée à une autre tablePervasive SQL Mettre a jour une Table
Réponse SQL variableRéponse "asp" à une une requete sql
Délai dépassé sur Requète SQL[SQL] Quand une des condition est dans le résultat
optimisation requete fgetsTrès étrange problème de sheets.select
Plus de sujets relatifs à : Requête SQL basée sur paramètre et table un peu étrange


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR