请教一条SQL语法!数据库是sqlserver2000 |
答題得分者是:cashxin2002
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
我是这样写的,但怎么看不到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 發送簡訊給我 |
引言: 我是这样写的,但怎么看不到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 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹒ 我想您可能誤解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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
如 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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
谢谢各位的热心肠
我是这样做的
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |