求一SQL语句;//在线等 ( 积分: 100 )

  • 主题发起人 主题发起人 雪狐狸
  • 开始时间 开始时间

雪狐狸

Unregistered / Unconfirmed
GUEST, unregistred user!
表A:
ANumber Name
001 产品A
002 产品B
003 产品C

表B:
ANumber Money
001 100.00
002 400.00
003 300.00

表C:
man ANumber
张三 002
李四 002
王五 001
王五 001
张三 003
王五 003
求:
┏━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┓
┃ ┃ 产品A ┃ 产品B ┃ 产品C ┃ 合计 ┃
┃ 姓名 ┣━━┳━━━╋━━┳━━━╋━━┳━━━╋━━┳━━━┫
┃ ┃数量┃ 金额 ┃数量┃ 金额 ┃数量┃ 金额 ┃数量┃ 金额 ┃
┣━━━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━┫
┃ 张三 ┃ 0 ┃ 0 ┃ 1 ┃ 400 ┃ 1 ┃ 300 ┃ 2 ┃ 700 ┃
┣━━━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━┫
┃ 李四 ┃ 0 ┃ 0 ┃ 1 ┃ 400 ┃ 0 ┃ 0 ┃ 1 ┃ 400 ┃
┣━━━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━╋━━╋━━━┫
┃ 王五 ┃ 2 ┃ 200 ┃ 0 ┃ 0 ┃ 1 ┃ 300 ┃ 3 ┃ 500 ┃
┗━━━━━┻━━┻━━━┻━━┻━━━┻━━┻━━━┻━━┻━━━┛


注:表A不只三项
 
我已经想出来怎么做了:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGridEh, StdCtrls, Buttons, ExtCtrls;
type
TMyGroup = array of array of string;
TForm1 = class(TForm)
DBGridEh1: TDBGridEh;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Panel1: TPanel;
BitBtn1: TBitBtn;
ADOQuery2: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
YGGroup: TMyGroup;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
j,ClassCon:integer;
begin
ADOQuery2.close ;
ADOQuery2.sql.Clear ;
ADOQuery2.sql.Add('select * from 表A order by Anumber');
ADOQuery2.Open ;
ClassCon:=ADOQuery2.RecordCount;
YGGroup:=nil;
setlength(YGGroup,ClassCon+1,3);
DBGridEh1.Columns[0].Title.Caption:= '姓名' ;
ADOQuery2.First;
j:=1;
while not ADOQuery2.Eof do
begin
YGGroup[j,1]:=ADOQuery2.fieldbyname('Anumber').AsString ;
YGGroup[j,2]:=ADOQuery2.fieldbyname('name').AsString ;
DBGridEh1.Columns.Add.NewInstance;
DBGridEh1.Columns[j*2-1].Title.Caption := YGGroup[j,2]+'|数量';
DBGridEh1.Columns.Add.NewInstance;
DBGridEh1.Columns[j*2].Title.Caption := YGGroup[j,2]+'|金额' ;
j:=j+1;
ADOQuery2.Next;
end;
DBGridEh1.Columns.Add.NewInstance;
DBGridEh1.Columns[j*2-1].Title.Caption := '合计|数量';
DBGridEh1.Columns.Add.NewInstance;
DBGridEh1.Columns[j*2].Title.Caption := '合计|金额' ;

{
ADOQuery2.close ;
ADOQuery2.sql.Clear ;
ADOQuery2.sql.Add('...'); //但现在这个怎么写呢?
ADOQuery2.Open ;
}
end;

end.
 
哈哈,恭喜你哈。虽然你做出来了,但是给你提一个建议,修改一下你的数据库表结构吧。
首先看看这两个表:
表A:
ANumber Name
001 产品A
002 产品B
003 产品C

表B:
ANumber Money
001 100.00
002 400.00
003 300.00
都是关于产品信息的,而且都是一对一的,都是描述一个产品的属性,包括编号,名称,单价(我个人理解价格是单价了哈。)那么为什么分开成两个表呢?
做成一个表,
产品编号,产品名称,单价。
这样是不是就更简单了。
你这个问题是你的数据库设计不合理,导致你要通过程序来实现了。
 
LS说的不错.可以整合到一个表里.这样操作起来会方便多了.除非还有另外功能.
 
support cqwty
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
680
import
I
后退
顶部