表一 (注 Group 唯一)
Group name
1 aa
2 bb
3 bb
4 bb
5 cc
6 cc表二 (注 Group 不唯一)
Group data
1 2
1 3
2 5
3 6
4 1求sql.text: 以表一的 name分组,对表二的data统计
Group name
1 aa
2 bb
3 bb
4 bb
5 cc
6 cc表二 (注 Group 不唯一)
Group data
1 2
1 3
2 5
3 6
4 1求sql.text: 以表一的 name分组,对表二的data统计
data统计什么? 求和?如果是Mysql数据库select 表1.name, sum(ifnull(表2.data, 0)) from 表1 left join 表2 on 表1.group = 表2.group
group by test1.name;
1 重复的数据,表二 中未出现的组存在查询中
2 未按表一的 name分组
3 加入分组的语句出错
我是新手,现在想用tquery部件的sql语句实现多表查询。我看资料说在查询之前要把tquery的databasename属性设置为空 ('').现在问题是,这个tquery在进行多表查询的时候,datasource要如何设置?我编写代码的时候给这个属性设置成空属性了(nil)。
在使用了下面这样的sql语句时,总是提示说数据表不存在。如果我把tquery的datasource设置为第一个数据表的数据库,提示的错误就是第二个数据表不存在,未知的数据库。在编写程序之前没有用bde设置过数据库的别名,在程序中使用数据库时都是采用代码进行相应的属性设置的。希望能给些建议。如果有一个实例的源代码最好不过了。
谢谢!select name,sum(data) as sumdata from 表2 inner join 表1 on 表2.[group]=表1.[group] group by name下面这些是我自己写的一部分代码
//userdata is a Tform object. TBresutl1,TBresutl2,TBresutl3 are three TTable objects.
//TQuery1 is a Tquery object. DSResult is a TDataSource object.
//Open three database
userdata.TBresult1.databasename:= 'c:\data\';
userdata.TBresult1.Tablename:='Result1.DB';
userdata.TBresult1.Open;
userdata.TBresult2.databasename:= 'c:\data\';
userdata.TBresult2.Tablename:='Result2.DB';
userdata.TBresult2.Open;
userdata.TBresult3.databasename:= 'c:\data\';
userdata.TBresult3.Tablename:='Result3.DB';
userdata.TBresult3.Open;
//set the Tquery1.databasename and Tquery1.datasource
userdata.TQuery1.Close ;
userdata.TQuery1.DatabaseName :='c:\data\';
userdata.DSResult.DataSet :=userdata.TbResult ;
userdata.TQuery1.DataSource := userdata.DSResult1 ; userdata.TQuery1.DatabaseName :='';
userdata.TQuery1.Sql.Clear ;
userdata.TQuery1.sql.add('SELECT Result1.field1, Result1.field3, Result2.field1, Result3.field3');
userdata.TQuery1.sql.add('FROM ":TBResult1:result1.DB" Result1'');
userdata.TQuery1.sql.add('INNER JOIN ":TBRsult2:Result2.DB" Result2');
userdata.TQuery1.sql.add('ON (Result1.field1 = Result2.field1)');
userdata.TQuery1.sql.add('INNER JOIN ":TBRsult3:Result3.DB" Result3');
userdata.TQuery1.sql.add('ON (Result3.field3 = Result1.field1)');
userdata.TQuery1.sql.add('WHERE ...................... ');
aa
bb
cc
没有group怎么和表二连接
若表一以group(或者group,name)分组,那无意义,因为表一group唯一,返回的结果就是表一LZ请写出你要的结果?
select [name],sum(data) as sumdata from 表2 inner join 表1 on 表2.[group]=表1.[group] group by [name]结果是:
name sumdata
aa 5
bb 12
/*
表结构的脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[g1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[g1]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[g2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[g2]
GOCREATE TABLE [dbo].[g1] (
[g] [int] NULL ,
[n] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[g2] (
[g] [int] NULL ,
[d] [int] NULL
) ON [PRIMARY]
GO
*/
select n, sum(d) from
(select t1.n, t2.d from [g1] t1, (select [g] g, sum(d) d from [g2] group by [g]) t2
where t1.g = t2.g) mm
group by n
aa 5
bb 12