Tsql 一张桌子上有两个不同的任务

Tsql 一张桌子上有两个不同的任务,tsql,stored-procedures,Tsql,Stored Procedures,我的讲师给我做了一个测试,我必须制作一个包含3列的表格:prodName、Qty和totSalesToDate。列Qty显示输入日期内已售出的产品数量,totSalesToDate表示在输入日期之前的一个月初已售出的产品。以下是示例结果表: prodName | Qty | totSalesToDate Car | 2 | 10 Bicycle | 8 | 22 Truck |

我的讲师给我做了一个测试,我必须制作一个包含3列的表格:
prodName
Qty
totSalesToDate
。列
Qty
显示输入日期内已售出的产品数量,
totSalesToDate
表示在输入日期之前的一个月初已售出的产品。以下是示例结果表:

prodName    |   Qty     |   totSalesToDate
Car         |    2      |       10
Bicycle     |    8      |       22
Truck       |    1      |        7
Motor-cycle |    3      |       12
我必须使用不带子查询的存储过程(TSQL)生成此表。到目前为止,我提出的问题是:

create procedure SalesReport @date varchar(10)
as
    select p.prodName,  sum(s.Qty) as Qty
    from PeriodTime pt full join Sales s on pt.Time = s.Time full join Product p on s.prodID = p.prodID
    where @date = pt.Date
    group by p.prodName
    union
    select p.prodName, sum(s.Qty) as totSalesToDate
    from PeriodTime pt full join Sales s on pt.Time = s.Time full join Product p on s.prodID = p.prodID
    where pt.Date between '2010060' and @date and p.prodName is not null
    group by p.prodName
go
但我得到的结果是这样的:

prodName    |   Qty
Car         |    2   
Car         |   10
Bicycle     |    8 
Bicycle     |   22
Truck       |    1     
Truck       |    7
Motor-cycle |    3     
Motor-cycle |   12
有人能帮忙吗?我一直在谷歌上搜索,但还是找不到答案。谢谢。

怎么样

create procedure SalesReport @date varchar(10)
as
select p.prodName,  
  SUM(CASE WHEN @date = pt.Date THEN s.Qty ELSE 0 END) as Qty,
  SUM(CASE WHEN pt.Date between '2010060' and @date THEN s.Qty ELSE 0.0 END) AS totSalesToDate
from PeriodTime pt full join Sales s on pt.Time = s.Time full join Product p on s.prodID = p.prodID

group by p.prodName
go  

如果您指定了要查询的现有架构和数据,而不是让读者从您尝试的查询中对其进行反向工程,这将非常有用。对不起,在sql server management studio 2012中,在哪里可以查看现有架构?我真的是tsql的新手。。谢谢你谢谢你的帮助。我试过了,但sum(case..when….)似乎不起作用。My table现在包含3列,但totSalesToDate的值与Qty的值完全相同。尝试在不使用
分组依据的情况下运行select以显示未分组的结果。确认您看到的是0.0,其中预期没有group by,我收到以下错误消息:Msg 8120,级别16,状态1,过程SalesReport,第3行列“dbo.Product.prodName”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在group by子句中。请立即尝试全部操作。查看分组和非分组查询之间的差异非常感谢您的帮助。真的很管用!顺便说一句,我只知道我们可以在…什么时候。。在sum()和select语句中。是否是子查询?