私はこのようなテーブルを作ろうとしています:
製品名 | 販売日 | TotalSalesUntilDate
A | 5 | 15 B | 10 | 30 C | 20 | 25 D | 18 | 43
SalesByDate は入力日の各商品の販売数、TotalSalesUntilDate は月の初日から入力日までの各商品の販売数を表します (入力日の例: 2010 年 3 月 17 日)。
サブクエリを使用してこのクエリを作成しました。
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
しかし、私は結果を得ました:
製品名 | 販売日 | TotalSalesUntilDate
A | 5 | 113 B | 10 | 113 C | 20 | 113 D | 18 | 113
TotalSalesUntilDate は、月の最初の日から入力日までに販売された製品の数を示しますが、製品ごとに区切られていないすべての製品についてです。
したがって、クエリを次のように変更しようとしたとき (「as TotalSalesUntilDate」の前に GROUP BY p.ProductID を追加):
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
このクエリを実行すると、次のエラー メッセージが表示されました。
「メッセージ 512、レベル 16、状態 1、プロシージャ SalesMTDSubQuery、行 7 サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが使用されている場合、これは許可されません。表現として。」
私はSQLが初めてで、まだ学んでいるので、これを解決する方法がわかりません。どんな助けでも大歓迎です。ありがとうございました。