 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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來處理,這樣就不會太長了 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|