可以用query再去查詢另一個query嗎? |
尚未結案
|
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?drop這個暫時talbe後,資料庫還是會變大,請問您是用Access的資料庫嗎? 若是,您可以不要將資料寫回後端就好了,方法如下: 將TQuery的屬性CachedUpdates設為True即可。一樣下Query.Append;Query.Post;只是不要下Query.ApplyUpdates;即可 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?先說明你的資料庫種類. 看你的操作法可能不是使用 temp table 吧. 若是要做統計的動作, 可以使用 sub query 來完成你要的資料, 如: 原來的 query select emp_name, title, salary from emp where comp='台北分公司' 然後我要算一些資料如下: select title, sum(salary) from ( select emp_name, title, salary from emp where comp='台北分公司' ) t1 group by title 記得 subquery 要給一個 alias name, 如上例的 t1, 但若是資料庫不支援 subquery 的話, 就只能用 temp table. 若是 mssql 的話, 可以這樣操作: select emp_name, title, salary into #tmp_t1 from emp where comp='台北分公司' select title, sum(salary) from #tmp_t1 group by title drop table #tmp_t1 這樣就可以了! |
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
謝謝各位大大的意見,我大致懂了,只是女子不才,還是有些問題,大概是因為我的方法錯誤了,
我若照channel的方法,將CachedUpdates設為TRUE,資料庫還是會一直變大,
timhuang 的方法我不知道要怎麼做,因為tamp table 是用迴圈一筆一筆寫入的,所以我不知道要如何改,我直接把我的程式碼附上,若有人願意再煩勞幫我看看,有沒有比較好的方法
我的作法很笨,見笑了~~
目的是要計算某本雜誌每一期的訂購本數 目的是要計算某本雜誌每一期的訂購本數 dm1.q4.Close;
dm1.q4.SQL.Clear;
dm1.q4.SQL.Add('select detail.magazine ,detail.amount,detail.o_start,detail.o_end from orders inner join detail on orders.o_no=detail.o_no where (detail.magazine=''' combobox2.Text ''') and ((detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')or (detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')) ');
dm1.q4.ExecSQL;
dm1.q4.open;
{
先查出目標雜誌的每一筆訂單明細,結果為 magazine(雜誌名稱),amount(數量),o_start(訂購起始期數),o_end(訂購結束期數)
A,1,1,3
A,2,1,3
A,1,2,4
}
dm1.q4.First;
dm1.q3.Close;
dm1.q3.SQL.Clear;
dm1.q3.SQL.Add('create table tmp (mname varchar(20),bno integer,amount integer)');
dm1.q3.ExecSQL;
for i:=0 to dm1.q4.RecordCount -1 do
begin
for a:=dm1.q4.FieldByName('o_start').AsInteger to dm1.q4.FieldByName('o_end').AsInteger do
begin
dm1.q3.SQL.Clear;
dm1.q3.SQL.Add('insert into tmp (mname,bno,amount) values(''' dm1.q4.FieldByName('magazine').AsString ''',' inttostr(a) ',' dm1.q4.FieldByName('amount').AsString ')');
dm1.q3.ExecSQL;
end;
dm1.q4.Next;
end; {用迴圈將每筆資料的訂購開始到結束的每一期數量拆開,並暫存到tmp
mname(名稱),bno(期數),amount(數量)
A,1,1
A,2,1
A,3,1
A,1,2
A,2,2
A,3,2
A,2,1
A,3,1
A,4,1 } dm1.q3.SQL.Clear;
dm1.q3.SQL.Add('select bno as 期數 ,sum(amount)as 總數量 from tmp where bno>=' edit1.Text ' and bno<=' edit3.Text ' group by bno');
dm1.q3.ExecSQL;
dm1.q3.Open;
{ 再統計A期刊每一期的訂購數量,結果為
期數,總數量
1,3
2,4
3,4
4.1 } //======刪除暫存table
dm1.q4.Close;
dm1.q4.SQL.Clear;
dm1.q4.SQL.Add('drop table tmp');
dm1.q4.ExecSQL;
//======
end;
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
ok, 看了你的程式了. 你的做法太浪費 ap 端的時間了, 不需要這麼做, 你先說明你的資料庫種類, 另外你的程式碼, 紅字部分請刪除, ExecSQL 是用在 insert, delete, update , Open 才是用在 select 資料的!!
dm1.q4.Close; dm1.q4.SQL.Clear; dm1.q4.SQL.Add('select detail.magazine ,detail.amount,detail.o_start,detail.o_end from orders inner join detail on orders.o_no=detail.o_no where (detail.magazine=''' combobox2.Text ''') and ((detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')or (detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')) '); |
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
那就不要使用 temp table 的功能, access 沒有這樣的功能, 你可以改用 subquery 即可, 如我前面所述. 再舉個例子: select col1, col2, sum(col3) from (select col1, col2 col3 from table1 where col2 >=200 and col2 <=300) t1 group by col1, col2 其中紅字的部分就是你第一篇中的 select * from ' query1....
的 query1, 這樣就可以達到你要的功能了!!
|
sera
一般會員 發表:10 回覆:19 積分:5 註冊:2003-06-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |