2017-10-13 6 views
0

Comment faire fonctionner la requête/sous-requête suivante? Son but est de calculer le poids d'une commande. La requête sera ensuite utilisée comme sous-requête dans d'autres, et jointe sur le numéro de facture. Si possible, je voudrais faire ce travail sans utiliser une sous-requête/sous-sélection dans le SQL. Par souci de clarté, je devrais préciser que cette requête se trouve dans un "frontend utilitaire" Access 2007 que j'ai créé pour un ancien système de gestion des commandes AS400 sur un serveur IBM iSeries DB2 SQL dont j'ai hérité par attrition, mais ces les détails ne sont probablement pas pertinents au problème.Comment créer une sous-requête qui résume une colonne calculée dans Access 2007 ..?

Cette version dev de la requête fonctionne parfaitement avec un numéro de facture codé en dur en elle:

SELECT Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt 
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item 
WHERE OrdersThisWeek.InvNum=557618 AND OrdersThisWeek.Qty>0 AND Products.Wgt>0; 

Mais comme indiqué ci-dessous, quand je me déplace le numéro de facture où sélectionner, enregistrez-le, déposez-le dans une autre requête, et le joindre sur le numéro de facture, il provoque l'erreur suivante: "Vous avez essayé d'exécuter une requête qui n'inclut pas l'expression spécifiée" InvNum "dans le cadre d'une fonction d'agrégation.". Je comprends ce que cela veut dire, mais je ne sais pas quoi faire à ce sujet:

SELECT OrdersThisWeek.InvNum, Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt 
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item 
WHERE OrdersThisWeek.Qty>0 AND Products.Wgt>0; 

J'ai joué avec elle, googlé, et lu à ce sujet, mais de toute évidence il y a quelques concepts clés que je » m manquant.

+1

double possible de [MS-Access - vous avez essayé d'exécuter une requête qui ne comprend pas la fonction d'agrégation spécifiée] (https: // stackoverflow. com/questions/19430500/ms-access-vous-essayé-d'-exécuter-une-requête-qui-n'inclut pas-le-spécifié-agg) –

Répondre

1

Cela signifie que, à partir de la table OrdersThisWeek, si vous voulez calculer le poids des articles sur le numéro de facture 557618, vous obtiendrez quelque chose comme:

InvNum  InvWgt 
------  ------ 
557618  42 

Mais si vous ne spécifiez pas numéro de facture, SQL ne sait pas comment regrouper les résultats. Voulez-vous juste une grosse somme de ce que chaque commande pèse? Probablement pas. Vous souhaitez utiliser 'GROUP BY dans votre déclaration comme ceci:

SELECT OrdersThisWeek.InvNum, Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt 
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item 
WHERE OrdersThisWeek.Qty>0 AND Products.Wgt>0 
GROUP BY OrdersThisWeek.InvNum;