VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

為何 Select .... Sum( ) 用到自訂函數,結果會不一樣

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
215001



註冊時間: 2003-06-11
文章: 393


第 1 樓

發表發表於: 星期日 十二月 22, 2013 8:35 am    文章主題: 為何 Select .... Sum( ) 用到自訂函數,結果會不一樣 引言回覆

請教各位:

在Select Sum() 函數內,只是把原本的條件,改用自訂函數判斷而已,為何結果會不一樣
該如何處理?

程式碼:
代碼:

PUBLIC xdate1,xdate2
xdate1=CTOD("0095/07/01")
xdate2=CTOD("0095/07/31")

CLOSE DATABASES all

SELECT custno,Sum(tot2) as 總金額,Sum(IIF(date>=xdate1 .and. date<=xdate2,tot2,0)) as 本月金額 ;
    FROM sales1 GROUP BY custno ORDER BY custno INTO CURSOR temp  && 正確的結果

*SELECT custno,Sum(tot2) as 總金額,Sum(IIF(chkmonth(),tot2,0)) as 本月金額 ;
    FROM sales1 GROUP BY custno ORDER BY custno INTO CURSOR temp  && 本月金額不對(大部份都是0)

RETURN


FUNCTION chkmonth
    RETURN ( date>=xdate1 .and. date<=xdate2 )  && 好像引用到該資料表欄位時,recno()都是停在該custno的第1筆
ENDFUNC



因為Select 查詢的條件很多,資料欄位又多,整個Select 命令超出8192字,太長了,
所以才會改用自訂函數來縮短成命令
回頂端
檢視會員個人資料 發送私人訊息
dunson



註冊時間: 2003-08-30
文章: 7


第 2 樓

發表發表於: 星期日 十二月 22, 2013 10:22 am    文章主題: 引言回覆

用巨集
lc_name ='date>=xdate1 .and. date<=xdate2'
Sum(IIF(&lc_name,tot2,0)) as 本月金額
試看看
回頂端
檢視會員個人資料 發送私人訊息
215001



註冊時間: 2003-06-11
文章: 393


第 3 樓

發表發表於: 星期日 十二月 22, 2013 10:27 pm    文章主題: 引言回覆

謝謝dunson

原本就是用巨集的方式,是可以

因為Select 查詢的條件增加很多,資料欄位又多,整個Select 命令超出8192字,太長了,
所以才會改用自訂函數來縮短成命令
回頂端
檢視會員個人資料 發送私人訊息
小賴



註冊時間: 2004-12-27
文章: 476


第 4 樓

發表發表於: 星期一 十二月 23, 2013 7:48 pm    文章主題: 引言回覆

RETURN ( date>=xdate1 .and. date<=xdate2 )

去除 .AND. 之 二點成 RETURN(date>=xdate1 and date<=xdate2)看看
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
215001



註冊時間: 2003-06-11
文章: 393


第 5 樓

發表發表於: 星期一 十二月 23, 2013 9:17 pm    文章主題: 引言回覆

我發現,在該自訂函數內,記錄指標並沒有移動到正確的那一筆資料,
當然就抓不到正確的資料值了,我加上一列顯示recno() ,
竟然是顯示: 1 , 1 , 1 , 1 , 9 , 9 , 9

FUNCTION chkmonth
messagebox( str(recno()) ) && 查看 recno 的變化
RETURN ( date>=xdate1 .and. date<=xdate2 ) && 好像引用到該資料表欄位時,recno()都是停在該custno的第1筆
ENDFUNC
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 6 樓

發表發表於: 星期二 十二月 24, 2013 10:28 am    文章主題: 引言回覆

試看看行否
代碼:

Select custno,sum(總金額) AS 總金額,sum(本月金額) AS 本月金額 ;
from (;
SELECT custno,tot2 as 總金額,IIF(chkmonth(),tot2,00000000) as 本月金額 ;
FROM sales1) a ;
GROUP BY custno ;
INTO CURSOR temp
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
215001



註冊時間: 2003-06-11
文章: 393


第 7 樓

發表發表於: 星期三 十二月 25, 2013 9:32 am    文章主題: 引言回覆

謝謝 ckp6250 兄

上面代碼,在第3列子查詢,出現 Syntax error 錯誤


我的環境: WinXP + VFP 8.0
回頂端
檢視會員個人資料 發送私人訊息
小賴



註冊時間: 2004-12-27
文章: 476


第 8 樓

發表發表於: 星期三 十二月 25, 2013 10:09 am    文章主題: 引言回覆

您真的認定 .and. 邏輯運算子是正確的嗎 ?
記得clipper是需要二點; 但 foxfro 是不必要的
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
215001



註冊時間: 2003-06-11
文章: 393


第 9 樓

發表發表於: 星期三 十二月 25, 2013 2:02 pm    文章主題: 引言回覆

我已經把 IIF(chkmonth(),tot2,00000000) 刪掉

改成 tot2 還是 Syntax error
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 10 樓

發表發表於: 星期五 十二月 27, 2013 9:42 am    文章主題: 引言回覆

看了再看, 我的程式碼應該沒有錯誤
莫非 vfp8.0不支援子查詢?
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
215001



註冊時間: 2003-06-11
文章: 393


第 11 樓

發表發表於: 星期五 十二月 27, 2013 5:12 pm    文章主題: 引言回覆

好像是不支援

不過看了你的程式碼之後也有收穫
就是把原程式拆成2次的Select來處理,這樣就不會太長了
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作