9 votes

Comment puis-je combiner plusieurs requêtes SQL ?

J'ai du mal à trouver un moyen de combiner deux requêtes SQL en une seule qui exprime une idée plus large.

Par exemple, disons que j'ai une requête A et une requête B. La requête A renvoie le nombre total d'heures travaillées. La requête B renvoie le nombre total d'heures de travail disponibles pour les travailleurs. Chacune de ces requêtes renvoie une seule colonne et une seule ligne.

Ce que je veux vraiment, cependant, c'est essentiellement la requête A par rapport à la requête B. Je veux connaître le pourcentage de capacité qui a été utilisé.

Je sais comment écrire les requêtes A et B indépendamment l'une de l'autre, mais mon problème survient lorsque j'essaie de comprendre comment utiliser ces requêtes pré-écrites pour créer une nouvelle requête SQL qui les utilise ensemble. Je sais qu'à un niveau supérieur, par exemple dans un rapport, je pourrais simplement appeler les deux requêtes et les diviser, mais je préférerais tout englober dans une seule requête SQL.

Ce que je cherche, c'est une idée générale sur la façon de combiner ces requêtes en utilisant SQL.

Gracias.

11voto

kevpie Points 5243

JOIN non contraint, produit cartésien de 1 ligne par 1 ligne

SELECT worked/available AS PercentageCapacity
FROM ( SELECT worked FROM A ), 
     ( SELECT available FROM B )

4voto

Oded Points 271275

Vous pouvez déclarer des variables pour stocker les résultats de chaque requête et renvoyer la différence :

DECLARE @first INT
DECLARE @second INT

SET @first = SELECT val FROM Table...
SET @second = SELECT val FROM Table...

SELECT @first - @second

2voto

Justin Niessner Points 144953

La réponse dépend de l'origine des données.

Si ça vient d'une seule table, ça peut être quelque chose d'aussi simple que :

select totalHours, availableHours, (totalHours - availableHours) as difference
from hoursTable

Mais si les données proviennent de tables distinctes, vous devez ajouter une colonne d'identification pour que les lignes puissent être réunies et fournir une vue utile des données.

Vous voudrez peut-être publier des exemples de vos requêtes afin que nous sachions mieux comment répondre à votre question.

2voto

Derek Flenniken Points 178

Vous pouvez interroger les requêtes :

SELECT
  a.ID
  a.HoursWorked/b.HoursAvailable AS UsedWork
FROM
  ( SELECT ID, HoursWorked FROM Somewhere ) a
INNER JOIN
  ( SELECT ID, HoursAvailable FROM SomewhereElse ) b
ON
  a.ID =  b.ID

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