【SQL Server】統計指定年份的1-12月份每個月的數據

如圖所示,現在有一個需求,主要是按當前年份查詢倉庫每一個月的庫存流水和配件的庫存佔比情況

 其要求如下:

控件

類型

長度

備註

查詢條件

 

 

 

服務站

 

 

服務站的查詢條件

數據來源:可用的服務站檔案

必選,可以多選

配件名稱

 

 

配件名稱的查詢條件

數據來源:可用的產品物料數據

必選,可以多選

年度

Picklist

 

前五年後十年的範圍,單選

顯示信息

 

 

查詢結果

標題

Expression

 

表達式,顯示“【參數年度所選值】年度客戶回款報表“

服務站

 

 

顯示服務站名稱,此列爲行分組。

數據來源:出庫單實體

發貨倉庫

 

 

數據來源:出庫單實體

配件名稱

 

 

顯示配件名稱值,此列爲行分組。

字體顯示藍色,下劃線效果

數據來源:出庫單明細實體

數量

 

 

數據來源:出庫單明細實體

月份

 

 

數據來源:出庫單實體創建時間

顯示結果

 

 

排序:一級行分組按服務站名稱排序,二級按配件名稱正序排序

顯示列:服務站,發貨倉庫,配件名稱,數量,每月總數。

顯示規則:所有數字顯示精確到兩位小數。

 

總計

 

 

針對本報表的彙總統計:配件一年內申請數量總和。

SQL語句如下:

DECLARE @userid uniqueidentifier = '9FC299F4-6E20-EA11-A12B-000C29D7F690'SET context_info = @userid
SELECT DISTINCT so.new_station_idname, so.new_recstocksite_idname, sod.new_product_idname
	, convert(int, SUM(sod.new_applyqty)) AS qty
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 1 THEN sod.new_applyqty
		ELSE 0
	END)) AS '1month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 2 THEN sod.new_applyqty
		ELSE 0
	END)) AS '2month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 3 THEN sod.new_applyqty
		ELSE 0
	END)) AS '3month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 4 THEN sod.new_applyqty
		ELSE 0
	END)) AS '4month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 5 THEN sod.new_applyqty
		ELSE 0
	END)) AS '5month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 6 THEN sod.new_applyqty
		ELSE 0
	END)) AS '6month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 7 THEN sod.new_applyqty
		ELSE 0
	END)) AS '7month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 8 THEN sod.new_applyqty
		ELSE 0
	END)) AS '8month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 9 THEN sod.new_applyqty
		ELSE 0
	END)) AS '9month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 10 THEN sod.new_applyqty
		ELSE 0
	END)) AS '10month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 11 THEN sod.new_applyqty
		ELSE 0
	END)) AS '11month'
	, convert(int, SUM(CASE 
		WHEN datepart(month, so.createdon) = 12 THEN sod.new_applyqty
		ELSE 0
	END)) AS '12month'
FROM Filterednew_zh_stockoutorder so, Filterednew_zh_stockoutorderdetail sod, Filterednew_srv_siteinv s
WHERE so.new_station_idname IN (@station)
	AND sod.new_product_idname IN (@productname)
	AND datepart(year, so.createdon) = @year
	AND so.new_recstocksite_id = s.new_stocksite_id
	AND sod.new_product_id = s.new_product_id
	AND so.new_zh_stockoutorderid = sod.new_stockoutorder_id
GROUP BY so.new_station_idname, so.new_recstocksite_idname, sod.new_product_idname

查詢結果如下:

 

 
發佈了64 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章