iT邦幫忙

0

MSSQL 下查詢後 再運算及小計顯示

請教邦友
我將數個table 下查詢命令後得出的查詢值如下

Select Stable.Name as shop
COUNT(case when (Wtable.Status <>'DEL')then 1 else null end) as 總數量,
COUNT(case when (Wtable.Status = 'ED')then 1 else null end) as 待處理中,
COUNT(case when (Wtable.Status = 'OK')then 1 else null end) as 已處理,
COUNT(case when (Wtable.Status = 'OK' and Wtable.Rem = '結案')then 1 else null end) as 已結案
    --這邊是查詢命令
    --將Wtable的Status各種狀態作各店的統計次數
    --DEL=刪單,ED=編輯中,OK=完成, 完成後結案在Rem標註'結案'
    
FROM Stable INNER JOIN
Wtable ON Stable.ShopNO = Wtable.ShopNo INNER JOIN
    --這邊是將 Stable 跟 Wtable作關聯,為了把中文店名show出來

where Wtable.BDate between '2017/01/01' and '2017/05/30'

GROUP BY Stable.NAME,Wtable.ShopNo
shop 總數量 待處理中 已處理 已結案
台北店 50 5 45 40
台中店 60 10 50 25
高雄店 20 2 18 18

那我想將結果加工成如下:
那我的SQL命令要怎麼改呢?

shop 總數量 待處理中 已處理 已結案 結案率 未處理率
台北店 50 5 45 40 89% 10%
台中店 60 10 50 25 50% 17%
高雄店 20 2 18 18 100% 10%
total 130 17 113 83 74% 14%
  1. 右方新增兩欄, 是否有比以下這種打法還要簡略的方式
    因為這樣SQL文字有點太長XD...
    SQL是否有取值出來作再運算的方式
    COUNT(case when (Wtable.Status = 'OK')then 1 else null end) / COUNT(case when (Wtable.Status = 'GG')then 1 else null end)
    目前還再找顯示成百分比的方式

  2. 在最下列顯示出總計total

再請邦友提供指教,謝謝

evio0502 iT邦新手 3 級 ‧ 2017-06-07 14:10:13 檢舉
你應該目標是網頁或程式這樣呈現吧~
不建議在SQL組織~跑回圈算總計以及
宣告變數算百分比比較合適,不然改內
需求後SQL會越來越難改
小魚 iT邦高手 1 級 ‧ 2017-06-07 23:08:11 檢舉
這樣差不多了,剩下的交給程式吧!
Albert iT邦高手 1 級 ‧ 2017-06-08 10:44:43 檢舉
用外圍多一層就可以了
在 SQL 可以完全處理

1 個回答

0
做工仔人!
iT邦高手 1 級 ‧ 2017-06-07 14:05:25
SELECT shop,A,B,C,D,(D/C*100) as dc,b/a*100 as ba 
FROM (
Select Stable.Name as shop
COUNT(case when (Wtable.Status <>'DEL')then 1 else null end) as A,
COUNT(case when (Wtable.Status = 'ED')then 1 else null end) as B,
COUNT(case when (Wtable.Status = 'OK')then 1 else null end) as C,
COUNT(case when (Wtable.Status = 'OK' and Wtable.Rem = '結案')then 1 else null end) as D
    --這邊是查詢命令
    --將Wtable的Status各種狀態作各店的統計次數
    --DEL=刪單,ED=編輯中,OK=完成, 完成後結案在Rem標註'結案'
    
FROM Stable INNER JOIN
Wtable ON Stable.ShopNO = Wtable.ShopNo INNER JOIN
    --這邊是將 Stable 跟 Wtable作關聯,為了把中文店名show出來

where Wtable.BDate between '2017/01/01' and '2017/05/30'

GROUP BY Stable.NAME,Wtable.ShopNo
)

最後的加總:建議用excel 做會比較快.

我要發表回答

立即登入回答