全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1180
推到 Plurk!
推到 Facebook!

请教一条SQL语法!数据库是sqlserver2000

答題得分者是:cashxin2002
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-25 15:24:27 IP:218.18.xxx.xxx 未訂閱
我的表里面有三个字段A(char),B(char),C(int) 其中A栏位可能有许多重复的记录,请问该如何把A栏位所有的相同记录的C栏位记录自动加总,归纳成一条记录显示出来?
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-25 15:37:21 IP:218.85.xxx.xxx 未訂閱
Select sum(c) from TableName group by a
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-25 16:07:00 IP:218.18.xxx.xxx 未訂閱
我在同一个dbgrid中好象做不了似的,因为我要产生一个新的字段去放这个加和的字段
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-25 16:11:39 IP:218.85.xxx.xxx 未訂閱
給一個別名即可: Select sum(c) as x from TableName group by a
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-25 16:15:28 IP:63.84.xxx.xxx 未訂閱
Select a, Sum(c) as 新字段名 from 資料表名 Group by a    抱歉﹗﹐貼上才發現撞題了﹒﹒﹒ 努力,相信會獲得美麗! 忻晟 發表人 -
------
忻晟
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-25 16:23:33 IP:218.18.xxx.xxx 未訂閱
我是这样写的,但怎么看不到as 之后的新的字段呢? with qry_abnormity do begin close; sql.clear; sql.Add('select badinvoice,factorycode,factoryname,outinvoice,po,batchno,model,modelexp,platesort,outquality,quality,platecolor,collectdate,exceptional,remark,accept,shipper,datetime,sum(quality) as totalsum from badplate'); sql.Add('group by badinvoice,factorycode,factoryname,outinvoice,po,batchno,model,modelexp,platesort,outquality,quality,platecolor,collectdate,exceptional,remark,accept,shipper,datetime'); prepared:=true; open; end;
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-25 16:35:40 IP:63.84.xxx.xxx 未訂閱
引言: 我是这样写的,但怎么看不到as 之后的新的字段呢? with qry_abnormity do begin close; sql.clear; sql.Add('select badinvoice,factorycode,factoryname,outinvoice,po,batchno,model,modelexp,platesort,outquality,quality,platecolor,collectdate,exceptional,remark,accept,shipper,datetime,sum(quality) as totalsum from badplate'); sql.Add('group by badinvoice,factorycode,factoryname,outinvoice,po,batchno,model,modelexp,platesort,outquality,quality,platecolor,collectdate,exceptional,remark,accept,shipper,datetime'); prepared:=true; open; end;
Group By 后面怎么會有那么多欄位﹖
------
忻晟
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-25 16:48:58 IP:218.18.xxx.xxx 未訂閱
不行啊,如果group by后面不把所有字段加上去,又运行不了,怎么什么回事
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-25 17:04:34 IP:61.155.xxx.xxx 未訂閱
Select *,sum(c) as x from TableName group by a try ~~~
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-25 17:11:36 IP:218.85.xxx.xxx 未訂閱
應該是可以的, 你有沒有重新設置一下DBGrid的Columns?(雙擊DBGrid,重新加上所有欄位試試) //如果你要那麼多欄位都顯示出來,把它們包含在Group by語句中是必須的, 你的SQL語句是沒錯的.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-25 17:11:56 IP:63.84.xxx.xxx 未訂閱
您好﹒    我想您可能誤解Group By的意思了﹒ Group By的作用是將資料群組化處理﹐比如說訂單資料表中﹐下SQL如下: Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select 產品編號, 數量 From 訂單'); Query1.Open; 以上的查詢結果如下﹕ 產品編號 數量 P001 4 P001 5 P002 6 P003 5 如果使用產品欄位群組化﹐下SQL如下﹕ Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select 產品編號, 數量 From 訂單 Group By 產品編號'); Query1.Open; 以上的查詢結果如下﹕ P001 9 P002 6 P003 5 SQL會把產品編號相同的產品的數量合計起來﹐成為一筆資料﹒ 你的Group By后面﹐把所有的欄位都加上﹐理論上一定是可以執行的﹐只是說像這樣的查詢結果是否有意義呢﹖如果按每個欄位名都去做一次群組化﹐那出現的資料筆數可是很惊人的喔﹒ 你先把你的的Code改一下(只使用badinvoice來做為群組化依据)﹕ with qry_abnormity do begin close; sql.text := 'select badinvoice, factorycode, factoryname, outinvoice, po, batchno, model, modelexp, platesort, outquality, quality, platecolor,collectdate,exceptional,remark,accept,shipper,datetime,sum(quality) totalsum from badplate group by badinvoice'); open; end; 努力,相信會獲得美麗! 忻晟
------
忻晟
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-25 17:35:22 IP:218.18.xxx.xxx 未訂閱
with qry_abnormity do begin close; sql.text := 'select badinvoice, factorycode, factoryname, outinvoice, po, batchno, model, modelexp, platesort, outquality, quality, platecolor,collectdate,exceptional,remark,accept,shipper,datetime,sum(quality) totalsum from badplate group by badinvoice'); open; 如果我照上所写,就会出现如下运行提示,请问什么原因? 列'badplate.badinvoice'在选择列表中无效,因为该列既不包含在聚合函数中,也不包括在group by子句中!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-25 17:43:39 IP:63.84.xxx.xxx 未訂閱
引言: with qry_abnormity do begin close; sql.text := 'select badinvoice, factorycode, factoryname, outinvoice, po, batchno, model, modelexp, platesort, outquality, quality, platecolor,collectdate,exceptional,remark,accept,shipper,datetime,sum(quality) totalsum from badplate group by badinvoice'); open; 如果我照上所写,就会出现如下运行提示,请问什么原因? 列'badplate.badinvoice'在选择列表中无效,因为该列既不包含在聚合函数中,也不包括在group by子句中!
不好意思﹐筆誤﹕ SQL.Text中最后一個括號')'(下面紅色處)請去除﹒ >); 另外﹐您還需要注意一下﹐各個欄位名有無寫錯﹒ 努力,相信會獲得美麗! 忻晟 發表人 -
------
忻晟
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-07-26 08:34:43 IP:218.18.xxx.xxx 未訂閱
去掉括号也一样出错啊,老兄
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-07-26 08:58:34 IP:218.16.xxx.xxx 未訂閱
如 Rain 兄所說,jtp 的語法沒有錯誤,因為Group By 一定要包含  所有 非群組數據。 試想想若有其中一個或多個非群組欄位在整合時 Group By 其他欄位後的數筆之中有不同的值,那出來的結果要選那筆值好呢?所以一定也要把他們放進 Group By 中。 不過 cashxin2002 兄也說出了重點 : 這樣做是很沒效率的 較好的做法是分兩個或多個 Query : 1. 只選必須 GroupBy 的和計算的 (Sum/Avg/etc.) 2. 選其他需要的資料給1做 Lookup 至於看不到新增的欄位,會不會是你之前加了 Field 進該 Query 新增欄位後沒再 Add New Field 加上丫? 你可試試用一全新的 Query 及 DBGrid 來試試。
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-07-26 10:16:08 IP:218.18.xxx.xxx 未訂閱
顺便问个问题,我想隐藏dbgrid中的第1栏,为什么我写的不行 dbgrid3.Fields[1].Visible:=false;
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-07-26 10:25:14 IP:63.84.xxx.xxx 未訂閱
請如Justmade版主所述﹐注意是否之前加了 Field 進該 Query 新增欄位後沒再 Add New Field 加上?    把你的Code貼上﹐大家再幫你看看是何處的問題吧 ( >) 努力,相信會獲得美麗! 忻晟
------
忻晟
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-07-26 10:33:34 IP:63.84.xxx.xxx 未訂閱
應該可以啊﹐不過你的Code是隱藏第二欄﹐請試試﹕ DBGrid1.Fields[0].Visible := False; 或者﹕ DBGrid1.Columns[0].Visible := False; 請注意﹐第一欄的No.應為0﹒ 努力,相信會獲得美麗! 忻晟
------
忻晟
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-07-26 10:35:17 IP:218.18.xxx.xxx 未訂閱
谢谢各位的热心肠 我是这样做的 try with qry_abnormity do begin active:=true; close; sql.clear; sql.Add('select batchno, platesort, model, platecolor ,sum(quality) "totalsum" from badplate'); sql.Add('group by batchno, platesort, model, platecolor'); prepared:=true; open; end; finally end; 我只把所需的那几个字段写入,那些则不需要,则没问题 我想隐藏dbgrid中的第1栏,为什么我写的不行 dbgrid3.Fields[1].Visible:=false;
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-07-26 10:45:45 IP:63.84.xxx.xxx 未訂閱
你已經將在DBGrid的Columns Editor欄位編輯器中﹐加入了所有的欄位﹐所以: dbgrid3.Fields[1].Visible:=false; 應改為﹕ dbgrid3.columns[1].Visible:=false; 第一個欄位請用[0]起始﹒ 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-04-27 15:37:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!