2016-09-21 80 views
0

我有一個簡單的CASE語句,其中在我希望顯示爲' - '的ELSE塊數字列中。 但它給我一個錯誤如何在CASE語句中將數字顯示字符串替換爲' - '

Arithmetic overflow error converting varchar to data type numeric. 

我會怎麼做呢? 我希望它是這樣的: enter image description here

SELECT 
      CASE WHEN ChargeName = 'Premium' THEN CompanyCommissionPercentage ELSE '-' END AS CompanyCommissionPercentage 
      ,CASE WHEN ChargeName = 'Premium' THEN RemitterCommissionPercentage ELSE '-' END AS RemitterCommissionPercentage 
      ,CASE WHEN ChargeName = 'Premium' THEN RemitterCommission ELSE '-'END AS RemitterCommission 
      ,CASE WHEN ChargeName = 'Premium' THEN GrossCommission ELSE '-'END AS GrossCommission 
FROM @tmpAccountsPayable 

回答

2
`SELECT 
      CASE WHEN ChargeName = 'Premium' THEN CAST(CompanyCommissionPercentage as varchar(10)) ELSE CAST('-' as varchar(10)) END AS CompanyCommissionPercentage 

FROM @tmpAccountsPayable` 
+0

是的。一個結果集只能有一個列的數據類型。由於遇到的第一個值是數字,所以該列設置爲數字。系統然後嘗試隱式地將 - 轉換爲數字並失敗,從而導致錯誤。因此,將數字轉換爲varchar數據類型可以解決您遇到的問題。注意:您不需要將' - '轉換爲varchar(10),它已經是字符數據。 – xQbert

+0

不知道這件簡單的事情。謝謝你的解釋。 – Oleg

+0

很高興幫助,並很高興你能弄清楚該怎麼做。我所做的只是提供原因。我發現知道爲什麼有幫助!另請注意:在Excel中,您可以傳入0而不是 - 並且Excel將格式化爲零作爲破折號。我相信它被稱爲會計風格(或者從主菜單下的工具欄中選擇',',號碼爲 – xQbert

0

這裏給出了在Excel中,您可以設置格式的圖片的-

你可能會更好傳遞一個零,而不是短跑並允許excel格式化使0 a - (當然假設輸出進入excel)

請注意以下在E20中將0值轉換爲 - 當記帳格式(逗號格式) 用來。

另請注意,當會計 - 縮進時,常規破折號是如何左對齊的。

enter image description here

相關問題