有关sql语句 |
缺席
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
我数据库中有两个表,一个是应收款表(mf_arp),另一个是收款表tc_mon,字段栏位如下:
应收款表mf_arp:
应收日期 应收单号 应收金额 已收金额 (其中已收金额为收款回冲金额)
bil_dd bil_no amt amt_rcv
2004/10/2 C04108 10000 9000 收款表tc_mon
收款日期 收款单号 收款金额 应收单号(其中应收单号对应的是应收款中的单号)
rp_dd rp_no amt_cls arp_no
2004/10/6 T04201 5000 C04108
2004/10/31 T04288 4000 C04108 我想自已写一个语句,能综合显示出来应收与已收情况的表,我的语句如下:
select a.bil_dd,a.bil_no,a.amt,a.amt_rcv,isnull(a.amt,0)-isnull(a.amt_rcv) as 未收金额,b.rp_dd,b.rp_no,b.amt_cls from mf_arp a left outer join t_mon b on b.arp_no=a.arp_no
我的结果如下显示:
bil_dd bil_no amt amt_rcv rp_dd rp_no amt_cls
2004/10/2 C04108 10000 9000 2004/10/6 T04201 5000
2004/10/2 C04108 10000 9000 2004/10/31 T04288 4000
可我如何才能将结果按我所想的方法如下显示呢?
bil_dd bil_no amt amt_rcv rp_dd rp_no amt_cls
2004/10/2 C04108 10000 9000 2004/10/6 T04201 5000
2004/10/31 T04288 4000 请各位前辈帮忙,谢谢!
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
实在不好意思,我找了半天,也没找出“Default為空”在那里,我是这样设的,在表单form1上有ADOConnection1,ADOQuery1,DBGrid1,DataSource1和Button1,其它没作什么设定,代码见下,还请帮忙看一下: unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, DB, Grids, DBGrids, ADODB; type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
BitBtn1: TBitBtn;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
VAR
a,b,d,m:string;
begin d:=edit1.Text;
a:='SELECT A.BIL_DD,a.bil_no,a.amt,a.amt_rcv,isnull(a.amt,0)-isnull(a.amt_rcv,0) as 未收,b.rp_dd,b.rp_no,b.amt_cls from mf_arp a,tc_mon b where a.arp_no=b.arp_no and rp_id=';
b:='1'; with adoquery1 do
begin
close;
sql.clear;
m:=a d b d;
sql.Add(m);
OPEN;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin end; end.
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); VAR a,b,d,m:string; begin d:=edit1.Text; a:='SELECT A.BIL_DD,a.bil_no,a.amt,a.amt_rcv,isnull(a.amt,0)-isnull(a.amt_rcv,0) as 未收,' 'b.rp_dd,b.rp_no,b.amt_cls from mf_arp a,tc_mon b where a.arp_no=b.arp_no ' 'and rp_id=' #39 edit1.Text #39;//增加紅色部份 b:='1'; with adoquery1 do begin close; sql.clear; m:=a d b d;//不清楚你的b 為什麼要等於d??? sql.Add(a); OPEN; end; end;TRY TRY SEE 發表人 - chih 於 2004/11/10 17:01:11 |
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
VAR
a:string;
begin
a:='SELECT A.BIL_DD,a.bil_no,a.amt,a.amt_rcv,isnull(a.amt,0)-isnull(a.amt_rcv,0) as 未收,'
'b.rp_dd,b.rp_no,b.amt_cls from mf_arp a,tc_mon b where a.arp_no=b.arp_no '
'and rp_id=' #39 edit1.Text #39;//增加紅色部份
with adoquery1 do
begin
close;
sql.clear;
sql.Add(a);
OPEN;
end;
end; 我已改过,可还是不对呀,显示结果如图,相同的内容同样会重复显示
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
不好意思,前面有点错。见下. 应收日期 应收单号 立帐单号 应收金额 已收金额 (其中已收金额为收款回冲金额)
bil_dd arp_no bil_no amt amt_rcv
2004/10/2 C04108 C04108 10000 9000 收款表tc_mon
收款日期 收款单号 收款金额 应收单号(其中应收单号对应的是应收款中的单号)
rp_dd rp_no amt_cls arp_no
2004/10/6 T04201 5000 C04108
2004/10/31 T04288 4000 C04108 我的意思是想将图中的蓝色部分C04510 4500 4500重复的部分不显示出来,因这是一张应收款单,对应有两笔收款RT49100002/RT47190003其显示结果为如下:
C04510 4500 4500 2004-9-10 RT49100002 3600
------ ---- ---- 2004-7-19 RT47190003 900
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
個人建議個笨方法,有錯請指正。
利用Calculated方式,先建立一個暫時編號的fkCalculated欄位,然後在
ONCalcFields事件上作處理,然後記得在DBGRID及報表上均利用該欄位取代原先之正式編號欄位
Var vField : String; Begin If Trim(vField) = '' Then Begin vField := DataSet.FieldByName('正式編號').AsString; DataSet.FieldByName('暫時編號').AsString := vField; End Else Begin If DataSet.FieldByName('正式編號').AsString = vField Then DataSet.FieldByName('暫時編號').AsString := '--' Else Begin vField := DataSet.FieldByName('正式編號').AsString; DataSet.FieldByName('暫時編號').AsString := vField; End; End; End;========================= 讀萬卷書~不如來K.TOP走一遭 ========================= |
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
Var vField : String; 利用FIELD EDITOR建立bil_dd1的kCalculated欄位,然後再 procedure TForm1.Query1CalcFields(DataSet: TDataSet); Begin If Trim(vField) = '' Then Begin vField := DataSet.FieldByName('bil_dd').AsString; DataSet.FieldByName('bil_dd1').AsString := vField; End Else Begin If DataSet.FieldByName('bil_dd').AsString = vField Then DataSet.FieldByName('bil_dd1').AsString := '-' Else Begin vField := DataSet.FieldByName('bil_dd').AsString; DataSet.FieldByName('bil_dd1' ).AsString := vField; End; End; End; 然後記得取應收日期欄位時,不取原bil_dd欄位改取bil_dd1欄位,如有多數欄位亦要作此處理則在該事件內再加入預設之欄位。如此不僅grid可顯示你要的結果,在報表上亦同作法。========================= 讀萬卷書~不如來K.TOP走一遭 ========================= |
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
首先利用FIELD EDITOR建立bil_dd1的kCalculated欄位,
然後在
procedure TForm1.Query1CalcFields(DataSet: TDataSet);
Begin
....輸入上述之程式碼(您可視需求再作修正)
End;
如果對該方式有問題者,建議參考delphi相關之資料庫書籍或搜尋站上相關文章應有助益。 =========================
讀萬卷書~不如來K.TOP走一遭
=========================
|
peterpcc
一般會員 發表:6 回覆:37 積分:13 註冊:2004-09-27 發送簡訊給我 |
我曾做過一種方式,也類似此畫面.
其實不難,我們換種概念來看,顯示是需要兩種方式,所以可以改用兩個SQL
按理來說,t_mon 應該是會有個流水序號的欄位(這兒的序號是自己產生的).
select '1',a.bil_dd,a.bil_no,a.amt,a.amt_rcv,isnull(a.amt,0)-isnull(a.amt_rcv) as 未收金额,b.rp_dd,b.rp_no,b.amt_cls from mf_arp a left outer join t_mon b on b.arp_no=a.arp_no AND 表身序號第一筆
UNION
select '2','','','','',0 未收金额,b.rp_dd,b.rp_no,b.amt_cls from mf_arp a left outer join t_mon b on b.arp_no=a.arp_no AND 表身序號<>第一筆
ORDER BY 1,2,3
1','2' 是為了排序用,這樣就能排得正確了
不過這樣的顯示,讓我想到了以前我在DOS也是這樣的寫法.
跟客戶對帳,也許把t_mon內的資料放置於報表的上頭會好些.
如果是要顯示銷貨明細項,當然此法就很好.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |