伤脑筋的Sql语句,跟大家的问题有点不一样

keardy 2003-08-20 12:23:14
物资:品名代号,类别
入库表:品名代号,合计金额,日期
进出表:品名代号,合计金额,日期
库存表:品名代号,收入01...收入12(对应一年12个月),库存01...库存12,年份。

现在要根据上面的表,做个查询,并插入到库存表中
查询是将某项产品的本月收入(合计金额)加起来,将结果更新到收入**列(本月收入),并将结果加上上月库存,将这个和更新到库存**列(本月库存)

我现在只会做第一步,就是统计本月收入,大家帮我看一下对不对,然后帮我完成整个语句。

select IsNull(sum(b.合计金额), 0) 收入数, a.品名代号 from 物资 a
Left Join (Select 日期,品名代号,合计金额 from 入库明细 Where month(日期) = month(GetDate())
Union all Select 日期,品名代号,合计金额 from 一进一出 Where month(日期) = month(GetDate())) b On A.品名代号 = b.品名代号
group by a.品名代号
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
愉快的登山者 2003-08-20
  • 打赏
  • 举报
回复
exec ('update 库存表 set 收入'+right(convert(char(6), getdate(), 112),2)
+' = 收入数, 库存'+right(convert(char(6), getdate(), 112),2)
+' = 库存'+right(convert(char(6), dateadd(mm, -1, getdate()), 112),2)+' + 收入数
from (select IsNull(sum(b.合计金额), 0) 收入数, a.品名代号 from 物资 a
Left Join (Select 日期,品名代号,合计金额 from 入库明细 Where month(日期) = month(GetDate())
Union all Select 日期,品名代号,合计金额 from 一进一出 Where month(日期) = month(GetDate())) b On A.品名代号 = b.品名代号
group by a.品名代号
) C
where 库存表.品名代号 = C.品名代号')

愉快的登山者


◢◣◢◣◢◣
waterw 2003-08-20
  • 打赏
  • 举报
回复
用存储过程或用在语句中用固定表插入也可
Create Table #Tmp(
品名代号 nVarchar(20) Not Null Default '',
收入01 Money Not Null Default 0,
收入...
收入12 Money Not Null Default 0
)
Insert Into #Tmp(Select 品名代号,
Case When Month(日期)=1 Then Sum(IsNull(合计金额,0)) Else 0 End,
...
Case When Month(日期)=12 Then Sum(IsNull(合计金额,0)) Else 0 End,
From 入库明细)
Insert Into #Tmp(Select 品名代号,
Case When Month(日期)=1 Then Sum(IsNull(合计金额,0)) Else 0 End,
...
Case When Month(日期)=12 Then Sum(IsNull(合计金额,0)) Else 0 End,
From 一进一出)
'插入收入
Insert Into 库存表(品名代号,收入01...收入12)
SElect 品名代号,Sum(收入01),..Sum(收入12) From #Tmp Group By Month,品名代号
'更新库存表
Update 库存表 Set 库存01=库存01+收入01,
...库存12=库存12+收入01+...收入12

CrazyFor 2003-08-20
  • 打赏
  • 举报
回复
先把入库表和出库表分别变成:
品名代号,收入01...收入12(对应一年12个月)

品名代号,库存01...库存12,年份
再做一下FULL JOIN就可以了.


得到这个
品名代号,收入01...收入12(对应一年12个月)
参考:
select 品名代号
,sum (case when month(日期)=1 then 合计金额 else 0 end) 收入01
,sum (case when month(日期)=2 then 合计金额 else 0 end) 收入02
....
from 入库表 group by 品名代号




keardy 2003-08-20
  • 打赏
  • 举报
回复
顶阿,大家帮帮我!
keardy 2003-08-20
  • 打赏
  • 举报
回复
to: tj_dns(愉快的登山者)
奇怪了,我在查询分析器中试了你的语句,提示有

服务器: 消息 156,级别 15,状态 1,行 2
在关键字 'right' 附近有语法错误。

我觉得好像都符合语法标准啊
keardy 2003-08-20
  • 打赏
  • 举报
回复
这里有个问题了,因为这个表是每个月都更新一次本月所在的列的(如若在本月更新就只需计算并添加'收入08'这个列),并不见得需要一次性更新全部。
所以一次更新全部方案并不是最好的。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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