iT邦幫忙

0

sql 語法請各位大神幫幫小弟

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220606/201486370A6XdY1HK0.png

select i.維修人員,i.接單數,i.保固內,i.保固外,i.已完修數,j.已退修數 from (
 select g.維修人員,g.接單數,g.保固內,g.保固外,h.已完修數 from (
 select e.維修人員,e.接單數,e.保固內,f.保固外 from (
 select c. 維修人員,c.接單數,d.保固內 from (
  select a.維修人員 維修人員,b.接單數 from (
    select MECHANIC_NAME 維修人員 from WO
    group by MECHANIC_NAME

  )A Left join (
   select MECHANIC_NAME 維修人員,count(*) 接單數 from  WO
   group by MECHANIC_NAME
  )B ON (A.維修人員 = b.維修人員)

--需確認 ASSET.HAVEWARRANTY=1 (保內還是外)
   )C left join (
    select wo.MECHANIC_NAME 維修人員,count(ASSET.HAVEWARRANTY) 保固內 from ASSET
    join wo on (wo.ASSET_ID = ASSET.ASSET_ID)
    where ASSET.HAVEWARRANTY = 1
    group by wo.MECHANIC_NAME
   )D on (c.維修人員 = d.維修人員)

    )e left join (
     select wo.MECHANIC_NAME 維修人員,count(ASSET.HAVEWARRANTY) 保固外 from ASSET
     join wo on (wo.ASSET_ID = ASSET.ASSET_ID)
     where ASSET.HAVEWARRANTY = 0
     group by wo.MECHANIC_NAME
    )f on (e.維修人員 = f.維修人員)
	 
	  )g left join (
       select wo.MECHANIC_NAME 維修人員,count(wo.STATE_NAME) 已完修數 from WO
	   where wo.STATE_NAME  like N'%已完修%'
       group by MECHANIC_NAME
      )h on (g.維修人員 = h.維修人員)

       )i full join (
        select wo.MECHANIC_NAME 維修人員,count(wo.STATE_NAME) 已退修數 from WO
	    where wo.STATE_NAME  like N'%已退修%'
        group by MECHANIC_NAME
       )j on (i.維修人員 = j.維修人員)

需新增
完成率=已完修數/(接單數-已退修數)
請教各位大神語法該如何下?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Ru
iT邦新手 5 級 ‧ 2022-06-07 17:19:40

第一行 增加一個欄位做運算即可
select i.維修人員,i.接單數,i.保固內,i.保固外,i.已完修數,j.已退修數 , convert(float,i.已完修數)/(convert(float,i.接單數)-convert(float,j.已退修數)) as 完成率
from (......

看更多先前的回應...收起先前的回應...
yu0901 iT邦新手 4 級 ‧ 2022-06-07 18:06:16 檢舉

感謝回復請問算出來的結果如何換算成百分比https://ithelp.ithome.com.tw/upload/images/20220607/20148637aJYroiOfmX.png

--工作表四-0606
 select i.維修人員,i.接單數,i.保固內,i.保固外,i.已完修數,i.已退修數,convert(float,i.已完修數)/(convert(float,i.接單數)-convert(float,j.已退修數))as 完成率 from (
 select i.維修人員,i.接單數,i.保固內,i.保固外,i.已完修數,j.已退修數 from (
 select g.維修人員,g.接單數,g.保固內,g.保固外,h.已完修數 from (
 select e.維修人員,e.接單數,e.保固內,f.保固外 from (
 select c. 維修人員,c.接單數,d.保固內 from (
  select a.維修人員 維修人員,b.接單數 from (
    select MECHANIC_NAME 維修人員 from WO
    group by MECHANIC_NAME

  )A Left join (
   select wo.MECHANIC_NAME 維修人員,count(*) 接單數 from  WO
   group by MECHANIC_NAME
  )B ON (A.維修人員 = b.維修人員)

--需確認 ASSET.HAVEWARRANTY=1 (保內還是外)
   )C left join (
    select wo.MECHANIC_NAME 維修人員,count(ASSET.HAVEWARRANTY) 保固內 from ASSET
    join wo on (wo.ASSET_ID = ASSET.ASSET_ID)
    where ASSET.HAVEWARRANTY = 1
    group by wo.MECHANIC_NAME
   )D on (c.維修人員 = d.維修人員)

    )e left join (
     select wo.MECHANIC_NAME 維修人員,count(ASSET.HAVEWARRANTY) 保固外 from ASSET
     join wo on (wo.ASSET_ID = ASSET.ASSET_ID)
     where ASSET.HAVEWARRANTY = 0
     group by wo.MECHANIC_NAME
    )f on (e.維修人員 = f.維修人員)
	 
	  )g left join (
       select wo.MECHANIC_NAME 維修人員,count(wo.STATE_NAME) 已完修數 from WO
	   where wo.STATE_NAME  like N'%已完修%'
       group by MECHANIC_NAME
      )h on (g.維修人員 = h.維修人員)

       )i left join (
        select wo.MECHANIC_NAME 維修人員,count(wo.STATE_NAME) 已退修數 from WO
	    where wo.STATE_NAME  like N'%已退修%'
        group by MECHANIC_NAME
       )j on (i.維修人員 = j.維修人員)

	   )i left join (
        select wo.MECHANIC_NAME 維修人員,count(wo.STATE_NAME) 已退修數 from WO
	    where wo.STATE_NAME  like N'%已退修%'
        group by MECHANIC_NAME
       )j on (i.維修人員 = j.維修人員)
Ru iT邦新手 5 級 ‧ 2022-06-08 09:27:48 檢舉

給你思路﹔1.將結果乘一百2.加上字串'%'(Float+String可能需要轉型)

yu0901 iT邦新手 4 級 ‧ 2022-06-09 13:57:04 檢舉

乘100試過不對只是將小數點往前移兩位我是需要呈現%比
2.加上字串'%'(Float+String可能需要轉型)
能否提供更完整的資料或者有無範例?

Ru iT邦新手 5 級 ‧ 2022-06-09 14:15:11 檢舉

完成率 0.05 = 5%
就是 0.05 * 100 = 5
加上 % (型別VARCHAR) => 5%

我要發表回答

立即登入回答