如何将2个表的数据合并到一个表中

以下内容,本可以用SQL语句直接完成,可惜本人对SQL只有基本的了解,所以,就写了个小程序来实现如下的功能。

问题描述:

现在手头有两个表,一个是表product,另一个是表saleinfo,两个表的关联字段就是itemnumber,表的结构如下:

product表:(某款商品的基本描述)

(产品款号) (产品名称) (产品描述)
itemnumber productname description

item1 name1 desc1

item2 name2 desc2

item3 name3 desc3

......
......

saleinfo表的:(同一款产品,销售给不同的客户,价格可能不同,而且同一款号最多重复二次)

(产品款号) (产品价格) (产品销售的客户)
itemnumber itemprice itemclient

item1 item1price1 item1client1 (第一款的第一个客户及价格)

item1 item1price2 item1client2 (第一款的第二个客户及价格)

item2 item1price1 item1client1 (第二款的第一个客户机价格)

item3 item3price1 item3client1 (第三款的第一个客户及价格)

item3 item3price2 item3client2 (第三款的第二个客户及价格)

...
...

现在,我想生成一个新的表,就叫做purpose吧,内容就是这2个表的集合,格式如下:

purpose表:

(产品款号) (产品名称) (产品描述)(第一个客户价格)(第一个客户)(第二个客户价格)(第二个客户)
itemnumber productname description itemprice1 itemclient1 itemprice2 itemclient2

item1 name1 desc1 item1price1 item1client1 item1price2 item1client2

item2 name2 desc2 item1price2 item1client2

item3 name3 desc3 item3price1 item3client1 item3price2 item3client2

..........

请问,SQL语句如何写,才能通过前面的2个表,生成我想要的第三个表。还有,大家的思路是什么?现在感觉没有思路了。

解决办法:

自己写了段代码,用循环做的。只是实现了我的需求,但是没有完善代码。感觉就是麻烦了点。全部代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;

type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOConnection2: TADOConnection;
ADOConnection3: TADOConnection;
ADOQuery3: TADOQuery;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k,tsum :integer; //循环数值
sqltext:string;
sql:array[1..7] of string;
s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15:string;
begin
tsum:=0;

//'update mubiao set itemspeed1='''+adoquery2.fieldvalues['itemspeed']+''',itemsort1='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+''''

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from mubiao');
adoquery1.Open;
showmessage(inttostr(adoquery1.RecordCount));

for i:=1 to adoquery1.RecordCount do
begin

adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from rosette where item='''+adoquery1.fieldvalues['item']+'''');
adoquery2.Open;
//showmessage(inttostr(adoquery2.RecordCount));

for j:=1 to adoquery2.RecordCount do
begin
adoquery3.Close;
adoquery3.SQL.Clear;

if j=1 then adoquery3.SQL.Add('update mubiao set itemspeed1='''+adoquery2.fieldvalues['itemspeed']+''',itemsort1='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=2 then adoquery3.SQL.Add('update mubiao set itemspeed2='''+adoquery2.fieldvalues['itemspeed']+''',itemsort2='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=3 then adoquery3.SQL.Add('update mubiao set itemspeed3='''+adoquery2.fieldvalues['itemspeed']+''',itemsort3='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=4 then adoquery3.SQL.Add('update mubiao set itemspeed4='''+adoquery2.fieldvalues['itemspeed']+''',itemsort4='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=5 then adoquery3.SQL.Add('update mubiao set itemspeed5='''+adoquery2.fieldvalues['itemspeed']+''',itemsort5='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=6 then adoquery3.SQL.Add('update mubiao set itemspeed6='''+adoquery2.fieldvalues['itemspeed']+''',itemsort6='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');
if j=7 then adoquery3.SQL.Add('update mubiao set itemspeed7='''+adoquery2.fieldvalues['itemspeed']+''',itemsort7='''+adoquery2.fieldvalues['itemsort']+''' where item='''+adoquery1.fieldvalues['item']+'''');

adoquery3.SQL.Add(sql[j]);
//showmessage(adoquery3.SQL.Text);
adoquery3.ExecSQL;

tsum:=tsum+1;
adoquery2.Next;
end;

adoquery1.Next;
end;

showmessage('共循环了'+inttostr(tsum)+'次');
end;

end.

文章分类目录:

添加新评论

Only text

  • 不允许HTML标记。
  • 自动断行和分段。

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
请输入下面的验证码再提交评论,不区分大小写。
Image CAPTCHA
Enter the characters shown in the image.