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邦新手 2 級 ‧ 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 可以完全處理
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

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 做會比較快.

我要發表回答

立即登入回答