2 votes

SQL Server : comment renvoyer un booléen ou une chaîne de caractères d'une ligne dans SELECT à partir de plusieurs lignes ?

J'essaie de renvoyer des informations condensées à partir d'objets auxquels sont liées de nombreuses relations ou lignes. Je comprends ce qui se passe, mais je ne sais pas comment éviter cela en SQL. Je spécifie que la requête doit renvoyer une condition basée sur chaque ligne.

Existe-t-il une fonction d'agrégation pour faire cela ? Quelque chose comme une fonction ANY qui ne renvoie qu'une seule valeur ? Je sais que cela est possible avec des fonctions comme SUM et AVG. J'ai essayé IF EXISTS sans succès. Je ne l'ai peut-être pas utilisé correctement.

Si ce n'est pas possible, alors je dois écrire du code pour cela. Ce n'est pas difficile, mais il serait plus difficile pour les futures personnes de maintenir les rapports/analytiques.

Voici un exemple de données si cela peut vous aider. C'est similaire mais toujours très différent de l'information.

Ensemble de données :

enter image description here

Résultats actuels :

enter image description here

Résultats souhaités :

enter image description here

Voici mon exemple de requête :

SELECT
    orderId,
    (CASE WHEN shippingMethod = 'Expedited' THEN 'Yes' ELSE 'NO' END) AS isExpedited,
    (CASE WHEN itemsUnder10 < 10 THEN 'Yes' ELSE 'NO' END) AS itemsUnder10
FROM 
    [Db].[dbo].[exampleTable]
GROUP BY
    orderId

Comment puis-je atteindre les résultats que je souhaite ?

Faites-moi savoir si je peux fournir de meilleures informations.

EDIT : J'ai oublié d'ajouter GROUP BY. Désolé. Je l'ajoute dans

2voto

Gordon Linoff Points 213350

Je pense que vous voulez juste l'agrégation :

SELECT orderId,
       MAX(CASE WHEN shippingMethod = 'Expedited' THEN 'Yes' ELSE 'NO' END) AS isExpedited
       MAX(CASE WHEN itemsUnder10 < 10 THEN 'Yes' ELSE 'NO' END) AS itemsUnder10
FROM [Db].[dbo].[exampleTable]
GROUP BY orderID;

0voto

Luis Ruiz Points 1

Il vous suffit de regrouper vos résultats

SELECT
orderId,
(CASE WHEN shippingMethod = 'Expedited' THEN 'Yes' ELSE 'NO' END) AS isExpedited
(CASE WHEN itemsUnder10 < 10 THEN 'Yes' ELSE 'NO' END) AS itemsUnder10
FROM 
[Db].[dbo].[exampleTable]
GROUP BY orderId
,shippingMethod
, itemsUnder10

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