2010-06-15 3 views
0

Quel est le problème avec ce code? Quelle serait la syntaxe correcte?sql 2008 requête. J'essaie de corriger ce message d'erreur

SELECT EmployeeID, SUM('More than 2 orders') 
FROM Orders 
WHERE EmployeeID >2 
GROUP BY EmployeeID 


Msg 8117, Level 16, State 1, Line 1 
Operand data type varchar is invalid for sum operator. 
+0

Qu'essayez-vous de faire? – gbn

+0

vous devez accepter une réponse à toutes vos questions ou les gens cesseront de poster des réponses –

Répondre

1

SUM('More than 2 orders') est la partie qui n'a pas de sens, comme le message d'erreur essaie de vous dire - vous SUM un champ numérique (ou expression), pas varchar (ie chaîne) constante. Qu'est-ce que vous essayez exactement de faire ici, avec cette "somme d'une chaîne"?

Modifier: l'OP précise dans un commentaire (OP, l'édition de votre question est une meilleure idée!):

Je voulais savoir combien d'employés ont traité au moins 2 commandes et tos comment le nombre d'employés.

Pour afficher qui employés « ont traité au moins deux ordres », en supposant par exemple il y a un enregistrement de la table pour chaque commande qui a été traité:

SELECT EmployeeID 
FROM Orders 
GROUP BY EmployeeID 
HAVING COUNT(*) >= 2 

cela ne montre pas exactement ordonne ces employés (la clarification ci-dessus ne le demande pas) et ne montre pas le nombre de ces employés - si c'est ce qui est requis au lieu des ID des employés,

SELECT COUNT(DISTINCT EmployeeID) 
FROM Orders 
GROUP BY EmployeeID 
HAVING COUNT(*) >= 2 

Si aucune de ces suppositions (ou ma conjecture à la table Commandes) est exactement ce que vous voulez, veuillez montrer le schéma de cette table (idéalement juste les parties pertinentes à la question) et un exemple simple de ce que vous voulez pour un court échantillon de contenu de la table - et s'il vous plaît réalisez que lire votre esprit (lorsque vous ne donnez pas les détails de votre problème) n'est pas un exercice intéressant de notre part, fournissant ainsi toutes les informations pertinentes, y compris vos spécifications et idéalement un petit exemple, est de loin le meilleur moyen d'obtenir des réponses rapides et informatives à vos questions.

+0

Merci pour votre aide.En fait, je voulais savoir combien d'employés ont traité au moins 2 ordres et combien le nombre d'employés. – getbruce

0

devrait être

SELECT 
    EmployeeID, 
    SUM(Col1), 
    SUM(Col2), 
    .. 
    .. 
FROM 
    Orders 
WHERE 
    EmployeeID > 2 
GROUP BY 
    EmployeeID 
+0

Comment le savez-vous? – gbn

+0

Merci pour votre aide. En fait, je voulais savoir combien d'employés ont traité au moins 2 ordres et combien le nombre d'employés. – getbruce

0

Il devrait ressembler à:

SELECT EmployeeID, SUM(Column) FROM Orders WHERE EmployeeID >2 GROUP BY EmployeeID. 

SUM ne peut pas être appliquée à un varchar contient du texte. Il ne peut s'appliquer qu'à des valeurs numériques.

Espérons que si vous avez essayé avec le groupe par son montré une erreur, la fonction d'agrégat devrait être là si vous l'avez ajouté, essayez avec une colonne a des valeurs numériques.

+0

Merci pour votre aide. En fait, je voulais savoir combien d'employés ont traité au moins 2 ordres et combien le nombre d'employés. – getbruce

0

Si je traduis votre commentaire correctement, vous voulez l'ID employé de chaque employé qui a 2 commandes ou plus. L'énoncé ci-dessous vous indique:

select EmployeeID from Orders group by EmployeeID having count(EmployeeID) > 1 
Questions connexes