iT邦幫忙

2

MSSQL資料庫產品庫存查詢語法該如何下

  • 分享至 

  • xImage

各位前輩大家好,小弟使用MSSQL2016
現有一產品庫存table,欄位有產品名稱、庫存數量、更新日期,資料固定每月1日12時備份一次,已經有三年的資料2018~2020,每個月產品庫存不一定會存在,有時候當月會出清,隔幾個月有可能會再補貨進來,我想下一個查詢,呈現「這三年」所有的「產品名稱」,於2020年1~12月庫存剩餘多少,沒有庫存的以0表示,實在想破頭不知道怎麼下,初步是開一個查詢a把所有產品先查出不重複的view再去關聯b查詢2020的規格有哪些帶出數量,不知道還有沒有更好的方法,謝謝

rogeryao iT邦超人 7 級 ‧ 2021-01-19 12:59:58 檢舉
請先至 https://dbfiddle.uk/?rdbms=sqlserver_2016 建立模擬的資料吧.
庫存表的數量是上次結帳之後的數量,跟庫存交易無關,所以直接查詢就好
但如果你要的是 這三年每月的庫存異動表,那就要去查庫存交易那張表
這樣會比較複雜一點,一般都是會寫好查詢語法然後做成報表
至於 排除0庫存物料,就是查詢條件加入 數量>0 就行了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
鬼王很慘
iT邦新手 2 級 ‧ 2021-01-19 17:14:46

不知道我理解是否正確?
聽起來你是要 select 所有產品的庫存,但是如果 where 日期,會造成某些產品跟著消失。

select * from table where '2020/1/1' <= date AND date < '2021/1/1'

其實你也講出解法了,就是關聯。這在業界是很平常的。

  1. 查出所有產品
  2. 關聯查詢數量,以日期篩選
  3. null代表該日期無庫存,顯示 0
select a.name, a.date, ISNULL(b.quantity, 0)
from table a
left JOIN (select * from table where '2020/1/1' <= date AND date < '2021/1/1') b
on a.Name = b.name;

我要發表回答

立即登入回答