2013-08-29 4 views
0

J'ai une table disons dbo.Orders J'ai une requête:de requêtes SQL Server par deux paramètres

SELECT Orders, COUNT(*) FROM dbo.Orders 
GROUP BY Orders 

Le résultat est

Order1  7 
Order2  4 
Order3  6 
Order4  5 
Etc 

Et une colonne avec chaque numéro de commande - OrderCounter. Ce que je veux est ceci:

SELECT * COUNT(*) FROM dbo.Orders 
WHERE Orders IN (Order1,Order2,Order3….) 

et de sélectionner chaque ligne de commande par une valeur de OrderCounter - max, max-1, etc max-2 en corrélation avec l'ordre respectif

Order1 MAX(Order1) 
Order2 MAX(Order2) 
Order3 MAX(Order3) 
Order4 Max(Order4) 
Etc 

Il Il semble que ma question ne soit pas facile à formuler. J'ai une table qui ont deux colonnes entre autres- article et ItemCounter, si un élément peut être dans la table à plusieurs reprises:

1. Items ItemCounter ….n 
2. Item1 1 
3. Item2 1 
4. Item2 2 
5. Item3 1 
6. Item3 2 

Voici mon code imaginaire, il ne fonctionne pas bien sûr, mais je l'espère montre ce que je veux obtenir.

SELECT * FROM Items 
WHERE Item IN ('9108915', '9324853', '8029717') AND 
     IN (MAX(ItemCounter1) for Item1,  
      MAX(ItemCounter2) for Item2, 
      MAX(ItemCounter3) for Item3) 
+0

Pouvez-vous fournir quelques lignes de données d'échantillons et les résultats attendus? Ce n'est pas très clair ce que vous demandez. –

+0

Eh bien, j'ai une table avec quelques commandes, order1, order2, order3 ... Ce que je veux est de sélectionner les lignes entières de la table Order par plusieurs commandes par leur numéro de commande respectif: Order1, someOrderNumber - disons max ou max - 1, date de cette commande, client pour cet ordre etc. Ordre2, someOrderNumber - disons max ou max - 1, date de cette commande, client pour cette commande etc. – Peter

+0

Donnez-nous votre disposition de table et des données d'échantillon. http://sqlfiddle.com/ serait de l'aide –

Répondre

0

Je pense que vous cherchez quelque chose comme ça

SELECT OrderID, CustomerID, OrderDate, 
     COUNT(*) AS NumberOfItems, MAX(Quantity) 
     ItemWithMaxUnits, SUM(ItemPrice*ItemQuantity) AS OrderTotalInMoney 
FROM dbo.Orders 
WHERE Orders IN (Order1,Order2,Order3) 
GROUP BY OrderID, CustomerID, OrderDate 

Regardez SQL aggregate functions pour plus d'informations

+0

Désolé d'être vague, ceci est ma première question dans StackOverflow. Je vais essayer à nouveau Ce que je veux est la suivante: « SELECT * FROM dbo.Orders où l'ordre = « 9108915 » ET ROWNUMBER = 4 » Seulement dans la vraie requête il y a plusieurs ordres et pour chaque commande je besoin d'une certaine manière pour sélectionner RowNumber approprié, pour le premier ordre, il pourrait être 3, pour le second 4 et ainsi de suite ... Je n'ai pas besoin de restriction de ma table par groupe, seulement quelques commandes avec leurs numéros de ligne respectifs .... – Peter

+2

Pouvez-vous s'il vous plaît cliquer sur modifier ci-dessous la question. Ajoutez la structure de données, des échantillons de données et les résultats attendus souhaités pour les données. –

0

je ne sais pas ce que vous essayez d'accomplir, mais cela pourrait aider :

Declare @OrdersParameter 
Set @OrdersParameter = (SELECT distinct Orders FROM dbo.Orders) 

SELECT Orders, COUNT(*) FROM dbo.Orders 
WHERE Orders in (@OrdersParameter) 
GROUP BY Orders 
+0

J'ai compris comment le faire: – Peter

+0

Désolé, je n'arrive toujours pas à formater correctement mes commentaires ... – Peter

+0

'; WITH Cont_CTE (CNumber, RowNo) AS ( \t SELECT CNumber, COUNT (*) - 1 à partir de dbo.MCont \t OÙ CNombre IN ('9108915', '9324853', '8029717') \t GROUP BY CNombre) SELECT * FROM DBO.MCont AS m JOIN Cont_CTE AS c ON m.CNumber + CAST (m.RowNo AS varchar (2)) = c.CNumber + CAST (c.RowNo AS varchar (2)) ' – Peter