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

Table欄位名稱相同但次數不相同,要如何把欄位名稱的次數相加,轉成另一Table?

答題得分者是:P.D.
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-07-15 21:26:57 IP:59.126.xxx.xxx 訂閱


[code delphi]
請教各位前輩,關於Table 欄位名稱相同,但出現次數不同,要如何把欄位名稱的次數相加,轉成另一Table
現附上實際 Table 資料,請各位前輩幫忙介紹要用那種方式解決?謝謝!
[/code]

ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-07-17 17:14:26 IP:60.248.xxx.xxx 未訂閱
這題看了很多遍,還是看不懂您的需求 ?
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-07-18 09:54:53 IP:59.126.xxx.xxx 訂閱
謝謝 ANDY8C 的指導,小弟的需求是希望 LOTTEMP3 Table 的Kg49 號碼有重覆的出現次數要相加,再覆寫回LOTTEMP3 Table,或是另開新Table寫入,例如 23出現4次,底下又有一個23出現1次,因此就是 23x5 再覆寫回LOTTEMP3 Table,或是另開新Table寫入,※說明我LOTTEMP3 Table 的Kg49、Kgtime 的Type 都是 A 的型態,因此希望各位前備指導,要用什麼方式來完成,一個Table內的出現相同號碼次數相家再回寫,謝謝!
===================引 用 ANDY8C 文 章===================
這題看了很多遍,還是看不懂您的需求 ?
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-07-19 10:17:31 IP:59.126.xxx.xxx 訂閱

===================引 用 K1086 文 章===================
謝謝 ANDY8C 的指導,小弟的需求是希望 LOTTEMP3 Table 的Kg49 號碼有重覆的出現次數要相加,再覆寫回LOTTEMP3 Table,或是另開新Table寫入,例如 23出現4次,底下又有一個23出現1次,因此就是 23x5 再覆寫回LOTTEMP3 Table,或是另開新Table寫入,※說明我LOTTEMP3 Table 的Kg49、Kgtime 的Type 都是 A 的型態,因此希望各位前備指導,要用什麼方式來完成,一個Table內的出現相同號碼次數相家再回寫,謝謝!
===================引 用 ANDY8C 文 章===================
這題看了很多遍,還是看不懂您的需求 ?

小弟用下列方式,請問各位前輩,有那種語法可以把相同 KG49 出現的次數(KGTIME) 相加再寫回?
SELECT KG49 COUNT(*) KGTIME
FROM LOTTEMP3
GROUP BY KG49
P.D.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-07-20 09:14:16 IP:118.169.xxx.xxx 未訂閱
1. COUNT(*) 是算出總筆數, 按本例, 如果使用COUNT(*) 只會得到 2
2. 你的問題應該是要用SUM(KGTIME), 但問題是由於你的 KG49, KGTIME 都是 STRING 型態, SUM() 我不確定是否可正確的執行, 我測試理論上是可以的

select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from xxx
group by YEAR, KG49
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-07-20 17:00:46 IP:59.126.xxx.xxx 訂閱

[code delphi]
procedure TTotal_DBFm1.Button4Click(Sender: TObject);
Var SQL:String;
begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;

SQL:='select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by YEAR, KG49';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有記錄資料...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KGTIME_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Query1.Next;
end;
Table3.Active := true;

end;
[/code]
※出現錯誤訊息:Invalid use of keyword token:YEAR 請問PD版主小弟程式在那出錯?請幫忙指導謝謝!
===================引 用 P.D. 文 章===================
1. COUNT(*) 是算出總筆數, 按本例, 如果使用COUNT(*) 只會得到 2
2. 你的問題應該是要用SUM(KGTIME), 但問題是由於你的 KG49, KGTIME 都是 STRING 型態, SUM() 我不確定是否可正確的執行, 我測試理論上是可以的

select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from xxx
group by YEAR, KG49
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-07-20 17:05:41 IP:59.126.xxx.xxx 訂閱

===================引 用 K1086 文 章===================

[code delphi]
procedure TTotal_DBFm1.Button4Click(Sender: TObject);
Var SQL:String;
begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;

SQL:='select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by YEAR, KG49';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有記錄資料...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KG49').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KGTIME_A').AsString := Query1.FieldByName('KGTIEM').AsString;
Table3.Post;
Query1.Next;
end;
Table3.Active := true;

end;
[/code]
※出現錯誤訊息:Invalid use of keyword token:YEAR 請問PD版主小弟程式在那出錯?請幫忙指導謝謝!
===================引 用 P.D. 文 章===================
1. COUNT(*) 是算出總筆數, 按本例, 如果使用COUNT(*) 只會得到 2
2. 你的問題應該是要用SUM(KGTIME), 但問題是由於你的 KG49, KGTIME 都是 STRING 型態, SUM() 我不確定是否可正確的執行, 我測試理論上是可以的

select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from xxx
group by YEAR, KG49
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-07-21 08:03:33 IP:210.61.xxx.xxx 未訂閱
YEAR → KGITEM


===================引 用 K1086 文 章===================



===================引 用 K1086 文 章===================



[code delphi]

procedure TTotal_DBFm1.Button4Click(Sender: TObject);

Var SQL:String;

begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;


SQL:='select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by YEAR, KG49';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有記錄資料...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KG49').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KGTIME_A').AsString := Query1.FieldByName('KGTIEM').AsString;
Table3.Post;
Query1.Next;
end;
Table3.Active := true;


end;

[/code]

※出現錯誤訊息:Invalid use of keyword token:YEAR 請問PD版主小弟程式在那出錯?請幫忙指導謝謝!

編輯記錄
老大仔 重新編輯於 2015-07-21 08:04:00, 註解 無‧
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-07-21 08:49:34 IP:59.126.xxx.xxx 訂閱

===================引 用 老大仔 文 章===================
YEAR → KGITEM

小弟改SQL:='select KGITEM, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by KGITEM, KG49';
結果還是出現錯誤→ Type mismatch in expression (類型不匹配) 是否我的 kgtime 是文字型態宣告無法運算??
[code delphi]

procedure TTotal_DBFm1.Button4Click(Sender: TObject);

Var SQL:String;

begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;


SQL:='select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by YEAR, KG49';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有記錄資料...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KG49').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KGTIME_A').AsString := Query1.FieldByName('KGTIEM').AsString;
Table3.Post;
Query1.Next;
end;
Table3.Active := true;


end;

[/code]

※出現錯誤訊息:Invalid use of keyword token:YEAR 請問PD版主小弟程式在那出錯?請幫忙指導謝謝!

tuga
高階會員


發表:16
回覆:105
積分:104
註冊:2002-07-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-07-23 14:31:57 IP:218.161.xxx.xxx 訂閱
kgtime 是文字, 請用 cast 或是 convert 轉成數值後再 sum

統計的結果 不要與原欄位名稱重複 sum(KG49)*sum(KGTIME) as subtotal


===================引 用 K1086 文 章===================

===================引 用 老大仔 文 章===================
YEAR → KGITEM

小弟改SQL:='select KGITEM, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by KGITEM, KG49';
結果還是出現錯誤→ Type mismatch in expression (類型不匹配) 是否我的 kgtime 是文字型態宣告無法運算??
[code delphi]

procedure TTotal_DBFm1.Button4Click(Sender: TObject);

Var SQL:String;

begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;


SQL:='select YEAR, KG49, sum(KG49)*sum(KGTIME) as KGTIME from LOTTEMP3 group by YEAR, KG49';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有記錄資料...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KG49').AsString;
Table3.Post;
Table3.Append;
Table3.FieldByName('KGTIME_A').AsString := Query1.FieldByName('KGTIEM').AsString;
Table3.Post;
Query1.Next;
end;
Table3.Active := true;


end;

[/code]

※出現錯誤訊息:Invalid use of keyword token:YEAR 請問PD版主小弟程式在那出錯?請幫忙指導謝謝!

K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-07-24 10:46:16 IP:59.126.xxx.xxx 訂閱

[code delphi]
procedure TTotal_DB_496Fm1.Button4Click(Sender: TObject);
Var SQL,STDT,ENDT:String;
begin
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD('Delete from LOTTEMP_A'); //先刪除暫存檔
Query2.ExecSQL;

SQL:='SELECT * FROM LOTTEMP3';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD(SQL);
Query1.Open;
if Query1.RecordCount =0 Then
SHOWMESSAGE('沒有開獎記錄...');
While NOT Query1.Eof do
begin
Table3.Append;
Table3.FieldByName('KGITEM_A').AsString := Query1.FieldByName('KGITEM').AsString;
Table3.FieldByName('KG49_A').AsString := Query1.FieldByName('KG49').AsString;
Table3.FieldByName('KGTIME_A').AsString := IntToStr(Query1.FieldByName('KG49').AsInteger*Query1.FieldByName('KGTIME').AsInteger);
Table3.Post;
Query1.Next;
end;
Table3.Active := true;

end;
end.
[/code]
謝謝 tuga 的指導 現在小弟修改程式之後,Run 的結果還是不正確,現附上新 Table 的結果圖檔,請各前輩指導要如何修正才會正確?
※程式執行要求說明: 新 Table 資料因該只會出現 01 .... 49 的出現次數一次而已,現在執行的不會歸類 所有 01 02 ... 49的次數依然還是各自寫入新的 Table 而且統計出現次數也錯誤 例如:原本 Lottemp3 有01x1 01x0 02x4 02x1 正確是合併統計後在 新的 Table 要變成 01x1 02x5 這樣才是我要的結果,但現在看到的還是會出現 二個01的 kg49 號碼,我只要出現一個01...49在新 Table 的kg49_a就好,麻煩請各前輩指導再看一下是要修改那一段程式館好嗎? _最傷腦筋是原 Lottemp3 Table 的kgtime 都是 A Type 無法改變。

K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-07-24 11:03:13 IP:59.126.xxx.xxx 訂閱

===================引 用 K1086 文 章===================

LOTTEMP_A 新 Table 資料
KGITEM_A KG49_A KGTIME_A
======= ====== =======
YEAR 01 1
YEAR 02 5
..
..
..
YEAR 49 5
正確是要出現上述的模式, 可是程式Run之後並沒有這樣,請各位前輩指導謝謝!



K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-08-05 20:07:18 IP:59.126.xxx.xxx 訂閱
小弟的問題已經解決了,是把 KGTIME的 STRING 型態 轉換成 Integer 再重新轉存 Table 去運算就 OK了 謝謝 PD 版主的提示。
系統時間:2017-10-17 17:29:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!