我正在尝试制作这样的表格:
产品名称 | 销售截止日期 | 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 显示了从当月的第一个日期到输入日期的销售产品数量,但对于所有产品,每个产品没有分开。
因此,当我尝试将查询更改为这样时(在“作为 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 行子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或使用子查询时,这是不允许的作为一种表达。”
由于我是 SQL 新手并且仍在学习,但我不明白如何解决这个问题。任何帮助将不胜感激。谢谢你。