这个查询怎么写?

ZeroC 2002-06-12 05:09:47
CREATE TABLE [dbo].[recordItem] (
[recordDateAndTime] [bigint] NOT NULL ,
[recordMaterialId] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[recordMaterialAmount] [bigint] NOT NULL ,
[recordMaterialPrice] [money] NOT NULL ,
[recordImportOrExport] [bit] NOT NULL ,
[recordClerkId] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
)
材料出入库单据表
recordDateAndTime时间
recordMaterialId材料号
......数量
......价格
.....是入库还是出库
.....管理员号
1.求出库存总金额(因为有recordImportOrExport,这个字段区别正负)
2.求出每种材料的库存量,库存的平均价格(每次入库价格可能不同,出库价格不影响)
...全文
58 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Corny 2002-06-13
  • 打赏
  • 举报
回复
最好的办法是在单据中保存库存的数据,也就是每个单据操作后保存库存余额,那样就没有什么计算量了,呵呵,不过要牺牲存储空间,但就现在的存储单价来看不是问题。
Yang_ 2002-06-13
  • 打赏
  • 举报
回复
to:Corny()
这么做,牺牲的应该不单单是存储空间,因为单据可能修改!
Yang_ 2002-06-12
  • 打赏
  • 举报
回复
我觉得应该有一个按一定时间存储的比如月结或者日结或者叫盘点表的数据,这样计算时以月结时间后来计算,保证计算量在可以控制的范围内。
至于当前的库存数据,可以用触发器来产生。
ZeroC 2002-06-12
  • 打赏
  • 举报
回复
Yang_(扬帆破浪)
我其实还有一个表来存材料的信息比如库存,价格,但是很显然这是现在的数据,而项目需要能生成有某年某月的库存情况统计报表,我想出的方法只有通过单据计算,不知道你还有没有什么好办法?
qybao 2002-06-12
  • 打赏
  • 举报
回复
试试看
1.
SELECT 总金额 = SUM(CASE
WHEN recordImportOrExport = Export THEN recordMaterialAmount*recordMaterialPrice
WHEN recordImportOrExport = IMport THEN (-1)*recordMaterialAmount*recordMaterialPrice
END)
FROM recordItem

2.
SELECT 库存量 = SUM(CASE
WHEN recordImportOrExport = Export THEN (-1)*recordMaterialAmount
WHEN recordImportOrExport = Import THEN recordMaterialAmount
END),
库存的平均价格 = SUM(CASE
WHEN recordImportOrExport = Import THEN recordMaterialPrice
ELSE 0
END)/SUM(CASE
WHEN recordImportOrExport = Import THEN 1
ELSE 0
END)
GROUP BY recordMaterialId

j9988 2002-06-12
  • 打赏
  • 举报
回复
不知你均价的概念,是进库的均价,还是进出库均价,进出价是否相等。
以下是进出库均价,供参考:
select recordMaterialId,
sum(recordMaterialAmount*(case when recordImportOrExport=1 then 1 else -1) as 库存,
(sum(recordMaterialAmount*recordMaterialPrice*(case when recordImportOrExport=1 then 1 else -1))/(sum(recordMaterialAmount*(case when recordImportOrExport=1 then 1 else -1)) as 均价
from recordItem group by recordMaterialId
Yang_ 2002-06-12
  • 打赏
  • 举报
回复
1、select sum(case when recordImportOrExport=1 then recordMaterialAmount*recordMaterialPrice else -recordMaterialAmount*recordMaterialPrice end) as AllStorePrice
from recordItem

2、
select recordMaterialId,sum(case when recordImportOrExport=1 then recordMaterialAmount else -recordMaterialAmount end) as StoreMaterialAmount,sum(case when recordImportOrExport=1 then recordMaterialAmount*recordMaterialPrice else -recordMaterialAmount*recordMaterialPrice end)/sum(case when recordImportOrExport=1 then recordMaterialAmount else -recordMaterialAmount end) as StoreAvgPrice
from recordItem
group by recordMaterialId

说多一句,只从材料出入库单据表来计算库存在用的时间长后速度会很慢,应该考虑设计问题。


愉快的登山者 2002-06-12
  • 打赏
  • 举报
回复
1.select sum(recordMaterialPrice * recordMaterialAmount * (case recordImportOrExport when true then 1 else -1 end)) from recordItem

2.select recordMaterialId, sum(recordMaterialAmount*(case recordImportOrExport when true then 1 else -1 end))as kcl, sum(recordMaterialPrice * recordMaterialAmount) / sum(recordMaterialAmount) as pjjg from recordItem
ZeroC 2002-06-12
  • 打赏
  • 举报
回复
分不够再加
ZeroC 2002-06-12
  • 打赏
  • 举报
回复
注:
是sql-server2000

34,576

社区成员

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

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