求一采购单季度统计报表的SQL查询!在线等...

3tzjq 2005-11-09 10:55:02
数据表:
产品资料表:Products --> P(代号)
采购单主表:PurchaseMaster --> PM
采购明细表:PurchaseDetails --> PD

关联字段:
Products:
ProductID 商品编号 主键
P_Name 商品名称
P_Des 商品描述
P_Unit 计量单位
...
PurchaseMaster:
PM_ID 采购单号 主键
PM_Date 采购日期
...
PurchaseDetails:
PD_ID 自动编号 主键
PM_ID 采购单号 外键(PurchaseMaster.PM_ID)
ProductID 商品编号 外键(Products.ProductID)
PD_Num 采购数量
PD_Price 单 价
...

需要列出的字段:
P.ProductID,
P.P_Name,
P.P_Des
P.P_Unit
Count(PD.PD_Num),
Max(PD.PD_Num),
Min(PD.PD_Num),
Avg(PD.PD_Num),
Max(PD.PD_Price),
Min(PD.PD_Price),
Avg(PD.PD_Price),
Sum(PD.PD_Price)

求 PM.PM_Date Between 某一季度的上述统计数据。谢谢!
...全文
251 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
3tzjq 2005-11-10
  • 打赏
  • 举报
回复
谢谢!
churchatp1 2005-11-09
  • 打赏
  • 举报
回复
select
P.ProductID,
P.P_Name,
P.P_Des
P.P_Unit,
Count(PD.PD_Num),
Max(PD.PD_Num),
Min(PD.PD_Num),
Avg(PD.PD_Num),
Max(PD.PD_Price),
Min(PD.PD_Price),
Avg(PD.PD_Price),
Sum(PD.PD_Price)
from
Products p,
PurchaseDetails pd,
PurchaseMaster pm
where p.ProductID =pd.ProductID and pd.PM_ID =pm.PM_ID
group by
P.ProductID,
P.P_Name,
P.P_Des
P.P_Unit,
datepart(year,pm.PM_Date),
datepart(quarter,pm.pm_date)

churchatp1 2005-11-09
  • 打赏
  • 举报
回复
不好意思,忘了年了

我写的是把所有季度都统计的
如果你只是要统计指定的话
那就放where里面就是了
declare @sql varchar(8000)
declare @quarter varchar(1)
declare @year varchar(4)
set @quarter='2005'--输入要查询的年
set @quarter='3' --s输入你要的季度
set @sql='select '+
'P.ProductID, '+
'P.P_Name, '+
'P.P_Des '+
'P.P_Unit, '+
'Count(PD.PD_Num), '+
'Max(PD.PD_Num), '+
'Min(PD.PD_Num), '+
'Avg(PD.PD_Num), '+
'Max(PD.PD_Price), '+
'Min(PD.PD_Price), '+
'Avg(PD.PD_Price), '+
'Sum(PD.PD_Price) '+
'from '+
'Products p, '+
'PurchaseDetails pd, '+
'PurchaseMaster pm '+
'where p.ProductID =pd.ProductID and pd.PM_ID =pm.PM_ID and '+
'datepart(quarter,PM.PM_Date)='+@quarter +' and datepart(year,PM.PM_Date)='+@year

exec (@sql)
这样就可以了

churchatp1 2005-11-09
  • 打赏
  • 举报
回复
我写的是把所有季度都统计的
如果你只是要统计指定的话
那就放where里面就是了
declare @sql varchar(8000)
declare @quarter varchar(1)
set @quarter='3' --s输入你要的季度
set @sql='select'+
'P.ProductID,'+
'P.P_Name,'+
'P.P_Des'+
'P.P_Unit,'+
'Count(PD.PD_Num),'+
'Max(PD.PD_Num),'+
'Min(PD.PD_Num),'+
'Avg(PD.PD_Num),'+
'Max(PD.PD_Price),'+
'Min(PD.PD_Price),'+
'Avg(PD.PD_Price),'+
'Sum(PD.PD_Price)'+
'from'+
'Products p,'+
'PurchaseDetails pd,'+
'PurchaseMaster pm'+
'where p.ProductID =pd.ProductID and pd.PM_ID =pm.PM_ID and'+
'datepart(quarter,PM.PM_Date)='+@quarter

exec (@sql)
这样就可以了
churchatp1 2005-11-09
  • 打赏
  • 举报
回复
我写的是把所有季度都统计的
如果你只是要统计指定的话
那就放where里面就是了
declare @sql varchar(8000)
declare @quarter varchar(1)
set @quarter='3' --s输入你要的季度
set @sql='select'+
'P.ProductID,'+
'P.P_Name,'+
'P.P_Des'+
'P.P_Unit,'+
'Count(PD.PD_Num),'+
'Max(PD.PD_Num),'+
'Min(PD.PD_Num),'+
'Avg(PD.PD_Num),'+
'Max(PD.PD_Price),'+
'Min(PD.PD_Price),'+
'Avg(PD.PD_Price),'+
'Sum(PD.PD_Price)'+
'from'+
'Products p,'+
'PurchaseDetails pd,'+
'PurchaseMaster pm'+
'where p.ProductID =pd.ProductID and pd.PM_ID =pm.PM_ID and'+
'datepart(quarter,PM.PM_Date)='+@quarter
这样就可以了
bugchen888 2005-11-09
  • 打赏
  • 举报
回复
SELECT P.ProductID,
Min(P.P_Name), Min(P.P_Des), Min(P.P_Unit),
Count(PD.PD_Num), Max(PD.PD_Num), Min(PD.PD_Num),
Avg(PD.PD_Num), Max(PD.PD_Price), Min(PD.PD_Price),
Avg(PD.PD_Price), Sum(PD.PD_Price)
FROM Products p, PurchaseDetails pd, PurchaseMaster pm
WHERE p.ProductID = pd.ProductID
AND pd.PM_ID = pm.PM_ID
GROUP BY P.ProductID, DATEPART(year,pm.PM_Date), DATEPART(quarter,pm.pm_date)


Group中没有必要出现P.P_Name,P.P_Des,P.P_Unit.
zxbyhcsdn 2005-11-09
  • 打赏
  • 举报
回复
你要用季度统计的嘛,当然datepart(year,pm.PM_Date),datepart(quarter,pm.pm_date)要放到Group by 了哟!

Group by 是分组的意思
3tzjq 2005-11-09
  • 打赏
  • 举报
回复
to churchatp1(别看资料,看聊效!) :
谢谢你的代码!
能否解释一下datepart(year,pm.PM_Date),datepart(quarter,pm.pm_date)为什么要放在Group By块中?还不是放在Where ... And PM.PM_Date Betwenn .... And ....?
另外能否让用户指定统计季度 或 统计任何有效的数据期间?

再次感谢!!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧