|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 1 樓
|
發表於: 星期二 四月 19, 2011 7:29 am 文章主題: SELECT - SQL 搞不懂它的 GROUP BY |
|
|
SELECT * FROM or01 WHERE or01_001='211104' GROUP BY or01_001 ORDER BY or01_001 INTO CURSOR _tmpf
在VFP 6.0是OK的
在VFP 9.0得到 SQL: GROUP BY clause is missing or invalid.
請教是發生何事? |
|
回頂端 |
|
|
pilipala
註冊時間: 2009-05-13 文章: 75
第 2 樓
|
發表於: 星期二 四月 19, 2011 7:35 am 文章主題: |
|
|
FROM 9.0 Help ~~
GROUP BY 子句指定一個或多個用來分組查詢傳回資料記錄的欄位。欄位參考自 SQL SELECT 敘述清單,除累計式運算式之外,必須包含在 GROUP BY 子句中。不能對附註型態欄位、通用型態欄位或二進位大型物件型態欄位進行分組。 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 3 樓
|
發表於: 星期二 四月 19, 2011 7:39 am 文章主題: |
|
|
pilipala 寫到: | FROM 9.0 Help ~~
GROUP BY 子句指定一個或多個用來分組查詢傳回資料記錄的欄位。欄位參考自 SQL SELECT 敘述清單,除累計式運算式之外,必須包含在 GROUP BY 子句中。不能對附註型態欄位、通用型態欄位或二進位大型物件型態欄位進行分組。 |
Help裡的說明有點給他看不懂,
or01_001是一個字串欄位,
並非附註型態欄位、通用型態欄位或二進位大型物件型態欄位這三種型態,
我只知如果改成:
SELECT or01_001 FROM or01 WHERE or01_001='211104' GROUP BY or01_001 ORDER BY or01_001 INTO CURSOR _tmpf
是可以的,
但是...or01.dbf裡有數百個欄位都要抓出來時,
不是頭粉大? |
|
回頂端 |
|
|
pilipala
註冊時間: 2009-05-13 文章: 75
第 4 樓
|
發表於: 星期二 四月 19, 2011 8:02 am 文章主題: |
|
|
引言回覆: |
SELECT Col1,Col2,SUM(Col3) AS Col1
FROM DBF
GROUP BY Col1,Col2
|
Help 的意思簡單說是
SELECT 的欄位,假如沒有應用到 彙總函數(EX:SUM()、MAX() .....等),就必須包含在GROUP BY 內 ~~ |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 5 樓
|
發表於: 星期二 四月 19, 2011 8:16 am 文章主題: |
|
|
pilipala 寫到: | 引言回覆: |
SELECT Col1,Col2,SUM(Col3) AS Col1
FROM DBF
GROUP BY Col1,Col2
|
Help 的意思簡單說是
SELECT 的欄位,假如沒有應用到 彙總函數(EX:SUM()、MAX() .....等),就必須包含在GROUP BY 內 ~~ |
GROUP BY - 顧名思義乃分組之義,
在幾十個或上百個欄位中,不可能全部拿來當分組欄位用,
正常只是拿1,2個欄位來分組,
SELECT Col1,Col2,Col3,Col4,Col5,...,Col98,Col99...
像這樣的SQL怎麼會要求GROUP BY 99個欄位?
真是怪哉 = ="
只好 SET ENGINEBEHAVIOR 70 了 >"< |
|
回頂端 |
|
|
heetee
註冊時間: 2010-11-20 文章: 16
第 6 樓
|
發表於: 星期二 四月 19, 2011 5:19 pm 文章主題: |
|
|
偶記得在vfp9是不能用select * ...的
若要用select * ...只好 SET ENGINEBEHAVIOR 70 了 |
|
回頂端 |
|
|
小桑•無痕
註冊時間: 2003-07-08 文章: 304 來自: Tainan, Taiwan
第 7 樓
|
發表於: 星期三 四月 20, 2011 9:31 am 文章主題: |
|
|
VFP 9.0 用的 SQL語法 比較嚴謹 _________________ 用力 Try 一下...可以發現很多好玩的事.... |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 8 樓
|
發表於: 星期三 四月 20, 2011 9:41 am 文章主題: |
|
|
vfp 7.0 以前的 sql 命令離標準 sql 的距離很遠.
這對同時使用 SPT 操作遠端資料庫也會造成不好的影響.
VFP 8/9 才改的離標準 sql 近一點.
不過我還是習慣用標準sql的語法.
就像之前 into table 到底應該放在哪裡的問題一樣. XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
小桑•無痕
註冊時間: 2003-07-08 文章: 304 來自: Tainan, Taiwan
第 9 樓
|
發表於: 星期三 四月 20, 2011 9:45 am 文章主題: |
|
|
syntech 寫到: | vfp 7.0 以前的 sql 命令離標準 sql 的距離很遠.
這對同時使用 SPT 操作遠端資料庫也會造成不好的影響.
VFP 8/9 才改的離標準 sql 近一點.
不過我還是習慣用標準sql的語法.
就像之前 into table 到底應該放在哪裡的問題一樣. XD |
+1 _________________ 用力 Try 一下...可以發現很多好玩的事.... |
|
回頂端 |
|
|
lzm
註冊時間: 2006-02-14 文章: 8 來自: 北京
第 10 樓
|
發表於: 星期四 四月 28, 2011 4:11 pm 文章主題: |
|
|
VFP8的group 使用体会:
一些在vfp7以下版本编制的 group 语句 ,往往在vfp8中 报错。
解决的办法,可以用下列两种方式之一:
1. SYS(3099,70)
2. SET ENGINEBEHAVIOR 70
但如果不想这样,就要注意符合vfp8的语句规则:
*!* 有如下数据:l.dbf
*!* bm lx je
*!* 外科 药费 1.01
*!* 外科 手术 2.02
*!* 内科 药费 3.03
*!* 儿科 检查 4.04
在vfp8以下,求分科的金额合计 可以这样:
SELECT bm,sum(je) FROM l GROUP BY bm
结果:
儿科 4.04
内科 3.03
外科 3.03
注意两点:
1。在group by 后的分组字段,必须在 select 中 出现(如 bm )
2。select 后 除分组字段外的其它字段,必须用 sum 求和(或 用 count 求记录数)
要想求交叉表,可用以下语句:
SELECT bm,sum(IIF(lx='药费',je,0)),sum(IIF(lx='手术',je,0)),sum(IIF(lx='检查',je,0)) FROM l GROUP BY bm
结果:
儿科 0.00 0 4
内科 3.03 0 0
外科 1.01 2 0
但这样求出的结果,除一项外,其他lx会丢失小数点后的数据,应该改为:
SELECT bm,sum(IIF(lx='药费',je,0.00)),sum(IIF(lx='手术',je,0.00)),sum(IIF(lx='检查',je,0.00)) FROM l GROUP BY bm
结果:
儿科 0.00 0.00 4.04
内科 3.03 0.00 0.00
外科 1.01 2.02 0.00
其原因在于:产生的交叉表的数据格式,以该组第一次遇到的数据格式为准。狐友不妨试试。
当lx各项数量不确定时(药费,手术,检查,治疗,。。。),可以采用拼接的方式,来组织 select 后的 语句,就可以灵活求出 交叉表了。 |
|
回頂端 |
|
|
qq620414
註冊時間: 2010-06-26 文章: 1
第 11 樓
|
發表於: 星期三 六月 29, 2011 10:58 pm 文章主題: |
|
|
加上sys(3099,70)即可 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|