GROUP BY dans la sous-requête T-SQL

Je suis en train de faire un tableau comme ceci:

ProductName | SalesByDate | TotalSalesUntilDate

    A     |      5    |      15

    B     |     10    |      30

    C     |     20    |      25

    D     |     18    |      43

SalesByDate signifie que le nombre de produits vendus pour chaque produit sur la saisie de la date et de l'TotalSalesUntilDate indique le nombre de produits vendus pour chaque produit à partir de la date du premier jour du mois jusqu'à la date d'entrée (exemple de saisie de date: 17 Mars 2010)

J'ai écrit cette requête à l'aide de sous-requête:

    select p.ProductName, A.SalesByDate,
      (select(SUM(case when (pd.Date between '01' and @Date) 
      then s.SalesByDate else 0 end)) 
    from Period pd 
    inner join Sales s on pd.TimeID = s.TimeID 
    full join Product p on s.ProductID = p.ProductID) as TotalSalesUntilDate 
    from Product p join 
         (select s.ProductID, pd.Date, s.SalesByDate
          from Period pd join Sales s on pd.TimeID = s.TimeID) A on 
    p.ProductID = A.ProductID where @Date = A.Date

mais j'ai obtenu le résultat:

ProductName | SalesByDate | TotalSalesUntilDate

     A    |     5     |      113

     B    |    10     |      113

     C    |    20     |      113

     D    |    18     |      113

qui le TotalSalesUntilDate indique le nombre de produits vendus dès le premier jour de chaque mois jusqu'à la date d'entrée mais pour tous les produits sans séparation pour chaque produit.

Alors, quand j'ai essayé de changer la requête comme ceci (ajout du GROUPE PAR p.ProductID avant", comme TotalSalesUntilDate"):

   select p.ProductName, A.SalesByDate,
     (select(SUM(case when (pd.Date between '01' and @Date) 
     then s.SalesByDate else 0 end)) 
   from Period pd 
     inner join Sales s on pd.TimeID = s.TimeID 
     full join Product p on s.ProductID = p.ProductID 
     group by p.ProductID) as TotalSalesUntilDate 
  from Product p join 
     (select s.ProductID, pd.Date, s.SalesByDate
     from Period pd join Sales s on pd.TimeID = s.TimeID) A on 
    p.ProductID = A.ProductID where @Date = A.Date

et lorsque j'exécute cette requête, j'ai ce message d'erreur:

"Msg 512, Niveau 16, État 1, Procédure SalesMTDSubQuery, Ligne 7
La sous-requête a retourné plus de valeur 1. Ce n'est pas permis lorsque l'
sous-requête suit =, !=, <, <= , >, >= ou lorsque la sous-requête est utilisé comme
une expression."

Depuis que je suis nouveau dans SQL et encore à apprendre, mais je ne comprends pas comment résoudre ce problème. Toute aide sera appréciée. Merci.

Il serait utile si vous pouviez fournir les données brutes que vous travaillez de sorte que nous pouvons exécuter la requête à nous-mêmes. Aussi quel est le but de '01' dans pd.Date between '01' and @Date?
'01' dans la maladie de parkinson.Date entre " 01 " et @Date pour obtenir la quantité de ventes à partir de la date de 01 jusqu'à la date d'entrée (j'ai mis la date saisie dans la variable @Date), puis de la SOMME, depuis que j'ai de l'état fonction SOMME. Oh, je vais fournir les données brutes de l'époque, mais depuis que les données sont trop, peut-être que je viens de poster une moitié. Il n'est pas un problème, n'est-ce pas?
J'ai édité la question en ajoutant les données brutes, qui est de 3 tables. Si c'est pas assez donc j'ai à offrir, laissez-moi savoir. Merci.

OriginalL'auteur SQLnubie | 2013-11-11