樓主的SQL程式碼基本上沒有大的毛病。以下寫法會更加規範一些(為子查詢表取一個別名):
select t.* from
(select 完成數/合同數 as 完成百分比,*
from 生產記錄表
where 生產日期 between 日期1 and 日期2) t
where t.完成百分比=1
執行這段程式碼系統會要求輸入日期1和日期2,然後就會返回結果。
語句出錯的原因是:生產記錄表的“合同數”欄位下存在為0的值,用“完成數”除以0,當然就會出錯。
解決辦法:
首先必須確保欄位“完成數”和“合同數”的資料型別必須是數字並且“合同數”不應為0
如果一定要允許“合同數”可以為0,則可以使用IIF函式對“合同數”為0的值進行特別處理(下面程式碼處理為百分百完成,因為零任務不用幹就已經完成)
(select IIF(合同數=0,1,完成數/合同數) as 完成百分比,*
當然你也可以處理為0或其他什麼的,那就要看如何理解了。以下處理為文字“未知百分比”
(select IIF(合同數=0,"未知百分比",完成數/合同數) as 完成百分比,*
where t.完成百分比="1"
樓主的SQL程式碼基本上沒有大的毛病。以下寫法會更加規範一些(為子查詢表取一個別名):
select t.* from
(select 完成數/合同數 as 完成百分比,*
from 生產記錄表
where 生產日期 between 日期1 and 日期2) t
where t.完成百分比=1
執行這段程式碼系統會要求輸入日期1和日期2,然後就會返回結果。
語句出錯的原因是:生產記錄表的“合同數”欄位下存在為0的值,用“完成數”除以0,當然就會出錯。
解決辦法:
首先必須確保欄位“完成數”和“合同數”的資料型別必須是數字並且“合同數”不應為0
如果一定要允許“合同數”可以為0,則可以使用IIF函式對“合同數”為0的值進行特別處理(下面程式碼處理為百分百完成,因為零任務不用幹就已經完成)
select t.* from
(select IIF(合同數=0,1,完成數/合同數) as 完成百分比,*
from 生產記錄表
where 生產日期 between 日期1 and 日期2) t
where t.完成百分比=1
當然你也可以處理為0或其他什麼的,那就要看如何理解了。以下處理為文字“未知百分比”
select t.* from
(select IIF(合同數=0,"未知百分比",完成數/合同數) as 完成百分比,*
from 生產記錄表
where 生產日期 between 日期1 and 日期2) t
where t.完成百分比="1"