2011-08-23 2 views
1


Je me demandais quelle méthode est la plus utilisée lors de la création d'une requête affichant des ventes pour deux mois différents (sélectionnés dans le paramètre).
Requête SQL pour l'affichage des ventes pour deux mois différents

Ma base de données ressemble à quelque chose comme ceci:

Posting Date Company  Size Sales 
01/01/2011  Microsoft 1000 900 

J'ai déjà un paramètre où « mois de l'année » est sélectionné. Ce que je veux, c'est avoir deux paramètres pour que je puisse comparer les ventes de "mois de l'année" côte à côte dans Microsoft Visual Studio.

Ainsi, la requête doit avoir deux paramètres, @ PostingDate1 et @ PostingDate2

Merci pour toute aide!

--UPDATE--

Essayer de rendre plus compréhensible. Les deux paramètres à sélectionner seront "année mois"
Pour que le tableau de résultat ressemble à ceci lorsque "mois de l'année" est sélectionné pour le paramètre 1: janvier 2011 quel que mois sont sélectionnées, que les résultats montreront les différents mois)

Company  Size  Sales1 Sales2 
Microsoft 1000  100  200 

C'est si les ventes pour janvier 2011 a été 100
et des ventes pour février 2011 était de 200

+0

la méthode la plus utilisée est un « où » clausule, est aussi souvent de ne pas utiliser les espaces sur les noms de champs (mais vous pouvez), peut-être quelque chose comme 'où « Date d'affichage »> = @ PostingDate1 et « Date d'affichage '<= @ PostingDate2' (utilisez 'ici s'il vous plaît) aidera. Je pense que votre question n'est pas claire. –

Répondre

1

Je pense que tu veux fais un CROSS JOIN, mais je ne suis pas complètement sûr d'avoir compris ta question. Si les résultats de votre requête sont ONLE ligne, alors je recommande un CROSS JOIN, de ne pas, alors c'est probablement préférable de ne pas l'utiliser. Il devrait être quelque chose comme ceci:

SELECT A.[Posting Date] [Posting Date 1], A.Company Company1, A.Size Size1, A.Sales Sales1, 
     B.[Posting Date] [Posting Date 2], B.Company Company2, B.Size Size2, B.Sales Sales2 
FROM (SELECT [Posting Date], Company, Size, Sales 
     FROM YourTable 
     WHERE [Posting Date] = @PostingDate1) A 
CROSS JOIN (SELECT [Posting Date], Company, Size, Sales 
      FROM YourTable 
      WHERE [Posting Date] = @PostingDate2) B 
+0

qu'en est-il de la "on" clausule de la jointure croisée? –

+0

@Luis Siquot - un 'CROSS JOIN' n'utilise pas la clause' ON', c'est simplement un produit cartésien entre les deux tables. – Lamak

+0

oui, vous avez raison, j'utilise toujours la syntaxe de virgule. Donc, il faut au moins une clause where comme 'A.Company = B.Company' ou dans d'autres cas pour plus d'un enregistrement sur la table, il va gâcher toutes les données –

0

Ma réponse:

J'ai fini avec « UNION », ne pas savoir si cela est plus approprié, mais il me suis débarrassé des données redondantes d'utiliser " CROSS JOIN ".

SELECT 
A.Company, A.Size, SUM(A.Sales) as Sales1, SUM(B.Sales2) 
FROM 
(
(SELECT Company, Size, Sales as Sales, 0 as Sales2 
FROM Sales 
WHERE Posting date = @PostingDate1) AS A 
UNION 
(SELECT Company, Size, 0 as Sales, Sales as Sales2 
FROM Sales 
WHERE Posting date = @PostingDate2) 
) AS B 
) 
GROUP BY 
A.Company, A.Size 
Questions connexes