如果用sql語言實現庫存查詢,怎樣用 SQL 語句,查詢庫存?

2022-12-07 18:06:16 字數 5519 閱讀 5054

1樓:匿名使用者

select a.物資名稱 ,a.型號, b.銷售日期, b.銷售單價

case(b.狀態)

when 1 then '在庫中'

when 2 then '已銷售'

when 3 then '全部'

endfrom a,b

希望對你有幫助,如有疑惑可繼續追加。

2樓:匿名使用者

如果a表有物資10種,庫存資訊就是10行,可以顯示10行的物資名稱,型號,庫存數,已銷售數和總數,但不能顯示銷售日期和 銷售單價,因為如果兩個合同銷售的是同一樣物資時,時間不同,單價也不同,實際上這時關注的是3個數量。假定有3個合同,合同1銷售的是物資1,合同2和合同3銷售的是物資2,語句應該這麼寫:

select 物資名稱,型號,庫存數,(select sum(已銷售數) from b where b.物資名稱=a.物資名稱) as 已銷售數,庫存數+(select sum(已銷售數) from b where b.

物資名稱=a.物資名稱) as 總數 from a

這就是庫存資訊,總數10行,其中有一行包含合同1的已銷售數,還有一行包含合同2和合同3的已銷售數,其餘8行已銷售數為0.

如果要顯示銷售日期,單價,就不是庫存資訊,是銷售資訊,應該是3行,需要的話可以繼續追問。

3樓:匿名使用者

a b 的表結構呢?

怎樣用 sql 語句,查詢庫存? 20

4樓:匿名使用者

select 商品, 入庫-出庫 as '庫存'

from(select 商品,sum(入庫數量) as '入庫'

from 商品入庫表 group by 商品) tmp_tblrkleft join (select 商品,sum(入庫數量) as '入庫'

from 商品入庫表 group by 商品) tmp_tblck on tmp_tblrk.商品=tmp_tblck.商品

5樓:

如果出庫和入庫是在同一個表裡的話,這可這麼寫:

select 商品,

sum(出庫) as '總出庫',

sum(入庫) as '總入庫',

(sum(總入庫)-sum(總出庫)) as '庫存'

from 流水賬表 group by 商品。

如果出庫和入庫是在兩張表裡記錄的話,則這麼寫:

select i.商品, 入庫總表.總入庫-出庫總表.總出庫 as '庫存'

from(select 商品,sum(入庫) as 總入庫from 入庫表 group by 商品) 入庫總表left join (select 商品,sum(出庫) as 總出庫

from 出庫表 group by 商品) 出庫總表on 入庫總表.商品=出庫總表.商品

6樓:匿名使用者

if exists (select name from sysobjects

where type = 'v' and name = '商品出庫')

drop view 商品出庫

gocreate view 商品出庫'as

select 商品, 入庫-出庫 as '庫存'

from(select 商品,sum(入庫數量) as '入庫'

from 商品入庫表 group by 商品) tmp_tblrk

left join (select 商品,sum(入庫數量) as '入庫'

from 商品入庫表 group by 商品) tmp_tblck on tmp_tblrk.商品=tmp_tblck.商品

go建立該試圖之後 你就可以直接

select * from 商品出庫

就能看到你要的資料。對於sql你自己再調一下就ok。

用sql怎麼實現庫存的先進先出?

7樓:

create table 表1(貨號 varchar(20),批次 int ,數量 int)

create table 表2(貨號 varchar(20) ,數量 int)

/*------------------------------*/

insert into 表1

select '001', 1, 100 union all

select '001', 2, 200 union all

select '001', 3, 300

/*------------------------------*/

insert into 表2

select '001', 400

/*------------------------------*/

select * from 表1

select * from 表2

/*------------------------------*/

select t1.貨號,t1.批次,

case when ((select isnull(sum(數量),0) from 表1 t3 where t3.貨號=t1.貨號 and t3.

批次

then case when ((select sum(數量) from 表1 t4 where t4.貨號=t1.貨號 and t4.

批次<=t1.批次)-isnull(t2.new_數量,0))<0 then 0

else ((select sum(數量) from 表1 t4 where t4.貨號=t1.貨號 and t4.

批次<=t1.批次)-isnull(t2.new_數量,0))

endelse t1.數量

end as 批次剩餘庫存數

from 表1 t1

left join (select 貨號,sum(數量) as new_數量 from 表2 group by 貨號) t2

on t1.貨號=t2.貨號

/*------------------------------*/

ps:上面將null轉換為0的函式為isnull,是sql server下的函式,你只要根據你的資料轉換為對應函式就可以了,如oracle是nvl,mysql是ifnull等等.

有問題hi我

8樓:匿名使用者

要用sql做的話,我就想到用儲存過程了。

我的思路如下:

兩層迴圈搞定

外層迴圈發貨表,取出一對pno、num;

內層迴圈對每一個pno、num對應的進貨表做減值操作,更新進貨表相應的資料。首先找到進貨表中與pno對應的批次(inno)存入一個list中,再依次對進貨表中的每一對pon、inno進行計算,並更新進貨表。

內層迴圈做計算:

if (ordernum-curnum)>0 then

update classsource set num = 0 where pno=orderpno and inno = n;

let ordernum =ordernum - curnum;

continue foreach;

else

update classsource set num = (curnum - ordernum) where pno=orderpno and inno = n;

exit foreach;

end if;

詳細**參看參考資料

我的資料庫是informix, 有返回值的叫function而不是procedure。

所以你看到的是funcion.

9樓:匿名使用者

--先計算每行的sum數量,然後找出比表2的數量多的最小批次批次,然後比該最小批次的批次號還小的批次全部改成0,臨界的那個批次顯示為之前的每行sum數量減去原表數量

select a.貨號,a.批次,case when (合計 - b.

數量) <=0 then 0 when (合計 - b.數量) < a.數量 then (合計 - b.

數量) else a.數量 end as 剩餘數量 from(

select *,合計=(select sum(數量) from @tb b where b.批次 <= a.批次)

from 入庫明細 a

) a left join (select 貨號,sum(數量) as 數量 from 銷售 group by 貨號) b

10樓:騎檮杌的小哪吒

select n.貨號,n.批次,

case

when n.countnum - l.數量< 0 then 0

when n.countnum - l.數量》 m.數量 then m.數量

else n.countnum - l.數量 end as 剩餘

from 庫存 m,

(select a.貨號,a.批次,sum(b.數量) as countnum

from 庫存 a,庫存 b

where a.貨號 = b.貨號 and a.批次 >= b.批次

group by a.貨號,a.批次 ) n,銷售 l

where m.貨號 = n.貨號 and m.批次 = n.批次 and n.貨號 = l.貨號

用sql語句怎麼實現庫存總量更新

11樓:匿名使用者

--更新前自己先做好備份

update a

set a.數量=b.總數量

from 材料庫存表 a innser join (-- 將明細按件號彙總,得到每個件號的總數量select 件號,sum(數量) as 總數量from 庫存明細表

group by 件號) b on a.件號=b.件號

12樓:匿名使用者

update 材料庫存表

set 數量 = (select sum(數量) from 庫存明細表 where 件號 = 材料庫存表.件號)

where exists ( select * from 庫存明細表 where 件號 = 材料庫存表.件號)

db2通過哦。。

13樓:射手幽靈伊

update 材料庫存表

set 數量 = b.數量

from 材料庫存表 a,( select 件號,sum(數量) 數量) b

where a.件號 = b.件號

14樓:匿名使用者

--這個肯定對 試一下親

update a set a.數量=b.數量 from 材料庫存表 a,(select sum(數量) as 數量,件號 from 庫存明細表 group by 件號) b where a.

件號=b.件號

15樓:

假設:材料庫存表:a,

庫存明細表:b

update a set 數量 = (select sum(數量) from b where a.件號 = b.件號)

用arm組合語言實現下列c語言語句 ifab

keil 編譯完能直接看到彙編 的啊,幹嘛要自己翻譯 int main int argc,char argv memset ifr i arm組合語言實現下列c語言語句 if a b x a b 8 else y a c b 20 gnu彙編語法 a word 1 b word 2 c word 3...

用C語言實現查詢陣列中重複的資料,刪除重複資料後輸出陣列

從第一個元素開始一次和其後元素比較,如果相等,先用一個變數記下這個位置,後面的元素全部向前移動,再從剛才記下的位置繼續比較,直到比較完畢,也就是合併完了所有的相同元素。再輸出陣列就行了。for int i 0 i for int j 0 j c語言排序後刪除陣列中重複的數字再排序輸出 include...

用c語言實現51微控制器的可調PWN輸出實驗,要求用按鍵s20 s23分別實現不同的佔空比,s20對

參考。如何用51微控制器輸出一個佔空比可調的方波 30 估計你這個是想使用微控制器來驅動dc dc穩壓電源吧。你買stc12系列的微控制器,自帶pwm及adc功能,然後通過輸出電壓及電流值調整頻率輸出,控制mos管驅動高頻變壓器就可以完成了。首先選bai擇一個i o設定為du輸出模式,這個就是zhi...