2 votes

Besides some issues with the HTML tags, this is the correct translation to French: Besoin de la somme de sélection sub sql mais besoin des variables dans la sous-sélection

Je suis en train de construire une REQUÊTE SQL pour un logiciel existant (Atlassian Jira) et je ne suis pas en mesure d'apporter des modifications à la base de données.

Nous avons plusieurs problèmes dans Jira (tableau : jiraissue) qui ont de 0 à n entrées de journal de travail dans un tableau séparé (tableau : worklog). Chaque journal de travail a également un identifiant d'utilisateur de l'utilisateur qui a enregistré le travail et l'utilisateur est membre d'un ou plusieurs groupes d'utilisateurs. Chacun de ces problèmes (tableau : jiraissue) est lié à un autre problème (dans un autre projet jira, mais cela - je suppose - n'est pas pertinent pour les non-experts de Jira) qui correspond comme "unité de coût".

cela signifie que nous voulons savoir combien de travail est enregistré sur chaque "unité de coût". donc nous avons besoin d'une requête qui retourne toutes les "unités de coût" et le temps enregistré par groupe d'utilisateurs sur les problèmes liés. le dernier point est que les "unités de coût" sont marquées avec un composant pour savoir quelles "unités de coût" appartiennent ensemble. donc pour afficher seulement les "unités de coût" qui sont pertinentes pour l'utilisateur du rapport, la requête utilise le composant pour le sélectionner.

ce que j'ai découvert jusqu'à présent fonctionne assez bien, mais retourne autant de lignes pour l'"unité de coût" qu'il y a de problèmes liés, mais j'ai besoin de la somme de tous les problèmes liés.

je devrais d'une manière ou d'une autre être en mesure de totaliser tous les résultats des sous-requêtes, mais cela ne semble pas possible. J'ai aussi essayé de travailler avec les déclarations de sous-sélection après FROM, mais alors je ne suis pas en mesure d'utiliser jiraissue.id.

voici ma requête actuelle :

SELECT 
  myktr.pkey,
  myktr.summary,
  sum(worklog_dev),
  (SELECT 
    sum(worklog.timeworked) 
  from
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-team-sdqm')) AS worklog_sdqm,
  (SELECT 
    sum(worklog.timeworked) 
  from
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-productowner')) AS worklog_pm 
FROM
  component,
  nodeassociation,
  jiraissue AS myktr 
  INNER JOIN issuelink 
    ON (issuelink.source = myktr.id) 
  INNER JOIN jiraissue 
    ON (
      issuelink.destination = jiraissue.id
    ),
  (SELECT 
    sum(worklog.timeworked) AS worklog_dev 
  FROM
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-developers')) AS worklog_dev_table 
WHERE myktr.pkey IN 
  (SELECT 
    jiraissue.pkey 
  from
    jiraissue,
    project 
  WHERE project.id = jiraissue.project 
    AND project.pkey = 'KTR') 
  AND component.ID = nodeassociation.SINK_NODE_ID 
  and myktr.id = nodeassociation.SOURCE_NODE_ID 
  and nodeassociation.ASSOCIATION_TYPE = 'IssueComponent' 
  and component.cname = 'Project-Component' ;

avez-vous des suggestions pour moi? FYI : nous travaillons avec PostgreSQL.

meilleures salutations, stefan

1voto

mthomas Points 564

Pour que votre agrégation fonctionne correctement, vous devrez utiliser la clause GROUP BY dans votre sélection principale :

...
GROUP BY composant
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X