是否有可能更有效地设计下列查询?我有一个库存表清单,买卖的产品。我的目标是计算我们库存中产品的净剩余数量。
选择StokKodu,GirenMiktar,Sum(GirenMiktar)-Sum(IF(IrsaliyeliCikanMiktar为NULL,0,IrsaliyeliCikanMiktar)为GorunurKalan,StokKodu为NULL,0,IrsaliyeliCikanMiktar))+Sum(IF(IrsaliyesizCikanMiktar为NULL,0,IrsaliyesizCikanMiktar))作为GercekKalan )作为GercekKalan,其中StokKodu IN(从StokKodu的目录中选择StokKodu)组
当我买新产品的时候。它使用一个新的StokKodu (股票Id)进入表,其数量为GirenMiktar。每当我开始销售的时候,有两种程序可以从GirenMiktar中减去。发票(IrsaliyeliCikanMiktar)销售,WayBill (IrsaliyesizCikanMiktar)销售。
例如:
Id
1
2
3-3-(3)
4
5
6-6
其结果必须是:
StokKodu
SKU1 1/10_1/S/S/S(100-20)(100-20-10)
.=‘2’>产品.
当然,结果集中还会有更多的描述列,如ProductName、Date等,这些列从GirenMiktaris大于零的行返回。
StokKodu指的是描述产品的标识。
GirenMiktar是指购买的产品数量。
IrsaliyeliCikanMiktar是指已开具发票的销售产品数量。
IrsaliyesizCikanMiktar是指尚未开具发票的销售产品数量。
非常感谢你的帮助。
发布于 2014-11-11 21:25:30
谢谢Benni的指导。开发他的查询提供了一点解决我的问题。我上面的第一个查询大约需要2.1秒。但是下面的查询大约需要0.0147秒。差别太大了。
select
*
from (
select
Tarih, StokKodu, FaturaNo, UrunAdi, GirenMiktar,
Sum(coalesce(GirenMiktar,0))
- Sum(coalesce(IrsaliyeliCikanMiktar, 0))
As GorunurKalan,
Sum(coalesce(GirenMiktar,0))
- Sum(coalesce(IrsaliyeliCikanMiktar, 0))
+ Sum(coalesce(IrsaliyesizCikanMiktar, 0))
As GercekKalan,
Birim, Fiyat, TedarikciId
from
inventory
group by
StokKodu
order by
Tarih Desc
) sonuc
where
GirenMiktar > 0
发布于 2014-11-11 19:57:33
您的WHERE
/ IN
部件不是必需的。试试这个:
select
StokKodu,
GirenMiktar,
Sum(coalesce(GirenMiktar,0))
-Sum(coalesce(IrsaliyeliCikanMiktar, 0)) As GorunurKalan,
Sum(coalesce(GirenMiktar,0))
- Sum(coalesce(IrsaliyeliCikanMiktar, 0))
+ Sum(coalesce(IrsaliyesizCikanMiktar, 0)) As GercekKalan,
Birim,
Fiyat,
TedarikciId
from
inventory
group by
StokKodu
order by Tarih Desc;
https://stackoverflow.com/questions/26871717
复制相似问题