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

請教一個SQL語法及DBChart走位的問題

答題得分者是:pedro
wwwbbs
初階會員


發表:41
回覆:59
積分:25
註冊:2003-05-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-15 11:44:58 IP:59.105.xxx.xxx 訂閱
依某廠商本年度交易總金額與去年度同期交易總金額顯示長條圖比較,目前碰到一個問題?
1.當A廠商去年1~12月都有交易而今年1~8月都有交易則沒有問題。
長條圖:9601&9701、....... 9607&9707、9608&9708、9609、9610、9611、9612
2.當A廠商去年或今年1~12月有部分月份沒有交易就有問題了!!
例如:去年交易月份1~4、6~9、11、12。今年交易月份1、3、5~8。
長條圖:9601&9701、9603&97059606&97079607&9708、9608、9609、9611、9612
也就是本來雙雙成對的月份就跑掉了,感覺上好像要從SQL語法下手,把無交易的月份填入0,這樣子長條圖比對才不會出問題,可是要如何透過SQL語法將無交易的月份填入0呢?

請各位前輩指教,謝謝大家!!
編輯記錄
wwwbbs 重新編輯於 2008-09-15 11:47:14, 註解 無‧
wwwbbs 重新編輯於 2008-09-15 11:48:28, 註解 無‧
wwwbbs 重新編輯於 2008-09-15 11:49:00, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-15 12:15:33 IP:210.61.xxx.xxx 未訂閱
撈出來的資料,可以用手動方式去填給Chart數值,把沒有數值的該月填0
示意如下:


[code delphi]
procedure Chart1OnBeforePrint(Sender: TfrxComponent);
var idx: integer;
begin
for idx:=0 to 3 do
begin
TfrxChartView(Sender).SeriesData.Items[idx].DataType:= dtFixedData;
TfrxChartView(Sender).SeriesData.Items[idx].XSource:= '200608;200609;200610;200611;200612;'
'200701;200702l;200703;200704;200705;'
'200706;200707;200708;200709;200710;'
'200711;200712';
end;
TfrxChartView(Sender).SeriesData.Items[3].YSource:='26298;18337;30919;10838;45436;'
'22863;0;11343;0;35296;'
'21727;230735;0;76272;39557;'
'0;130213';
TfrxChartView(Sender).SeriesData.Items[2].YSource:='218370;159421;168783;0;145899;'
'145031;0;194804;473366;353271;'
'271231;0;613231;743645;1057918;'
'0;613231';
TfrxChartView(Sender).SeriesData.Items[1].YSource:='183755;0;165318;165791;0;'
'334776;0;174018;0;145278;'
'0;208614;0;166481;120871;'
'127140;244431';
TfrxChartView(Sender).SeriesData.Items[0].YSource:='210053;258521;196237;0;377146;'
'357639;0;371399;328371;339995;'
'365098;0;351514;387784;491202;'
'0;848010';
end;
[/code]


編輯記錄
pedro 重新編輯於 2008-09-15 12:17:58, 註解 無‧
pedro 重新編輯於 2008-09-15 12:21:38, 註解 無‧
wwwbbs
初階會員


發表:41
回覆:59
積分:25
註冊:2003-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-16 10:40:18 IP:59.105.xxx.xxx 訂閱
pedro大大感謝您相助,but...小弟不才,無法看懂您的程式碼。請問TfrxChartView是???

小弟是用Delphi 6.0,使用兩個ADOQuery去個別統計96年及97年A廠商的每月交易總額,透過DBChart設定兩個Series分別為96年及97年,個別設定其Seires→DataSource→DataSet→ADOQuery

X軸為交易月份
Y軸為交易金額
畫出來的長條圖排列就如發問中的描述,例如9601及9701兩個長條圖會緊鄰在一起,可以馬上看出該期與去年同期的高低,但是如果非同月份緊鄰在一起就失去比較的意義了,所以想要填入0值就是要讓無交易月份也會正常顯示。

不知以上需求在大大的Code要如何修改?還是有其他思路可以解決呢?目前是想到將查詢統計結果再插入到TempDB後畫出,不知是否有更Smart的方法,請大大們指點一下迷津,肛溫喔


===================引 用 pedro 文 章===================
撈出來的資料,可以用手動方式去填給Chart數值,把沒有數值的該月填0
示意如下:


[code delphi]
procedure Chart1OnBeforePrint(Sender: TfrxComponent);
var idx: integer;
begin
for idx:=0 to 3 do
begin
TfrxChartView(Sender).SeriesData.Items[idx].DataType:= dtFixedData;
TfrxChartView(Sender).SeriesData.Items[idx].XSource:= '200608;200609;200610;200611;200612;'
'200701;200702l;200703;200704;200705;'
'200706;200707;200708;200709;200710;'
'200711;200712';
end;
TfrxChartView(Sender).SeriesData.Items[3].YSource:='26298;18337;30919;10838;45436;'
'22863;0;11343;0;35296;'
'21727;230735;0;76272;39557;'
'0;130213';
TfrxChartView(Sender).SeriesData.Items[2].YSource:='218370;159421;168783;0;145899;'
'145031;0;194804;473366;353271;'
'271231;0;613231;743645;1057918;'
'0;613231';
TfrxChartView(Sender).SeriesData.Items[1].YSource:='183755;0;165318;165791;0;'
'334776;0;174018;0;145278;'
'0;208614;0;166481;120871;'
'127140;244431';
TfrxChartView(Sender).SeriesData.Items[0].YSource:='210053;258521;196237;0;377146;'
'357639;0;371399;328371;339995;'
'365098;0;351514;387784;491202;'
'0;848010';
end;
[/code]


pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-16 11:41:10 IP:60.248.xxx.xxx 未訂閱
題目看錯了,原本以為你用fastreport做報表Chart

既然回答你了,仔細看一下題目,思路差不多也是用暫存表或陣列去處理中間資料,再用TChart或TDBChart呈現


[code delphi]
const
yymm:array[0..3] of string = ('200608','200609','200610','200611');
data1:array[0..3] of integer = (26298,0,30919,10838);
data2:array[0..3] of integer = (35296,21727,230735,0);
var
i:Integer;
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
for i :=0 to 3 do
begin
{ ClientDataSet1.Append;
ClientDataSet1yymm.Value:=yymm[i];
ClientDataSet1Score1.Value:=data1[i];
ClientDataSet1Score2.Value:=data2[i];}
Chart1.Series[0].Add(data1[i],yymm[i]);
Chart1.Series[1].Add(data2[1],yymm[1]);
end;
// ClientDataSet1.SaveToFile('c:\a.cds');
Chart1.Repaint;
end;
[/code]
wwwbbs
初階會員


發表:41
回覆:59
積分:25
註冊:2003-05-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-09-17 19:45:05 IP:59.105.xxx.xxx 訂閱
謝謝pedro大大的熱心相助。

===================引 用 pedro 文 章===================
題目看錯了,原本以為你用fastreport做報表Chart

既然回答你了,仔細看一下題目,思路差不多也是用暫存表或陣列去處理中間資料,再用TChart或TDBChart呈現


[code delphi]
const
yymm:array[0..3] of string = ('200608','200609','200610','200611');
data1:array[0..3] of integer = (26298,0,30919,10838);
data2:array[0..3] of integer = (35296,21727,230735,0);
var
i:Integer;
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
for i :=0 to 3 do
begin
{ ClientDataSet1.Append;
ClientDataSet1yymm.Value:=yymm[i];
ClientDataSet1Score1.Value:=data1[i];
ClientDataSet1Score2.Value:=data2[i];}
Chart1.Series[0].Add(data1[i],yymm[i]);
Chart1.Series[1].Add(data2[1],yymm[1]);
end;
// ClientDataSet1.SaveToFile('c:\a.cds');
Chart1.Repaint;
end;
[/code]
系統時間:2024-04-20 0:30:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!