2010-08-12 7 views
1

C'est la sortie que j'ai obtenue de ma requête. Vous pouvez voir les ventes mensuelles pour 1997 est suivi par les ventes mensuelles de 1998. (Il pourrait ne pas montrer au format approprié ici, mais ils sont tous dans une rangée)Colonne correspondante SQL

Month Year Sales 
--------------------------- 
1  1997 61258.07045 
2  1997 38483.63504 
3  1997 38547.21998 
4  1997 53032.95254 
5  1997 53781.28987 
6  1997 36362.80255 
7  1997 51020.85756 
8  1997 47287.67004 
9  1997 55629.24256 
10  1997 66749.22589 
11  1997 43533.80906 
12  1997 71398.42874 
1  1998 94222.11064 
2  1998 99415.28734 
3  1998 104854.155 
4  1998 123798.6822 
5  1998 18333.6304 
6  1998 23245.34 
7  1998 553894.34 
8  1998 67004.67 
9  1998 51020.85756 
10  1998 38547.21998 
11  1998 61258.07045 
12  1998 53032.95254 

Comment obtenir 1998 le long des ventes de 1997. Comme-

Month | Sales1997 | Sales1998 
-------------------------------- 

La requête que j'ai jusqu'à présent -

Select T1.Mth, T1.Yr, T1.Sales 
from (Select month (o.OrderDate) Mth, 
       Year(o.orderdate) Yr, 
       Sum((od.unitprice*od.Quantity)- (od.unitprice*od.Quantity*od.discount)) as Sales 
      from [Order Details] od 
      join Orders o on o.OrderID = od.OrderID 
Group by month (o.OrderDate), Year(o.orderdate)) as T1 
    Where T1.Yr=1997 
     or T1.Yr=1998 
+0

S'il vous plaît ne pas poster le code avec onglets - c'est une douleur reformater. –

Répondre

3

En supposant SQL Server 2005+, en utilisant un CTE:

WITH summary AS (
     SELECT MONTH(o.OrderDate) AS Mth, 
      YEAR(o.orderdate) AS Yr, 
      SUM((od.unitprice * od.Quantity) - (od.unitprice*od.Quantity*od.discount)) as Sales 
     FROM [Order Details] od 
     JOIN ORDERS o on o.OrderID = od.OrderID 
     WHERE YEAR(o.orderdate) IN (1997, 1998) 
    GROUP BY MONTH(o.OrderDate), YEAR(o.orderdate)) 
    SELECT s.mth, 
     MAX(CASE WHEN s.yr = 1997 THEN s.sales ELSE NULL END) AS sales1997, 
     MAX(CASE WHEN s.yr = 1998 THEN s.sales ELSE NULL END) AS sales1998 
    FROM summary s 
GROUP BY s.mth 

SQL Server 2005+ fournit également PIVOT/UNPIVOT.

Sans le CTE:

SELECT s.mth, 
     MAX(CASE WHEN s.yr = 1997 THEN s.sales ELSE NULL END) AS sales1997, 
     MAX(CASE WHEN s.yr = 1998 THEN s.sales ELSE NULL END) AS sales1998 
    FROM (SELECT MONTH(o.OrderDate) AS Mth, 
       YEAR(o.orderdate) AS Yr, 
       SUM((od.unitprice * od.Quantity) - (od.unitprice*od.Quantity*od.discount)) as Sales 
      FROM [Order Details] od 
      JOIN ORDERS o on o.OrderID = od.OrderID 
      WHERE YEAR(o.orderdate) IN (1997, 1998) 
     GROUP BY MONTH(o.OrderDate), YEAR(o.orderdate)) s 
GROUP BY s.mth 
+0

Cela fonctionne. Merci beaucoup – Abey

+0

+1. Bonne réponse –

+0

@astander: Cool - vous êtes de retour! –

Questions connexes