表1:人事表:
编号 姓名
1 AAA
2 BBB
3 CCC
4 DDD
表2:基本工资表:
编号 姓名 金额
1 AAA 100
2 BBB 200
3 CCC 300
4 DDD 400
表3:效益表:
编号 类型 数量
1 A 1
1 B 1
2 A 1
表4:总计表
编号 姓名 基本工资 类型A 类型B 类型C A类型报酬 B类型报酬 C类型报酬 其他所得 总计
1 AAA
2 BBB
3 CCC
4 DDD
说明:表1、2、3、4中的编号是公司职员编号与姓名一一对应,表3是每笔业务一条记录,表4是总工资表要求有人事表中所有编号、姓名,求表4,表4可以是已建好空表,可以是新建表。总计可以不算。
不知道一条语句能不能搞定,多条也行!分不够尽管说,全部给你都可以(虽然没有多少分)
编号 姓名
1 AAA
2 BBB
3 CCC
4 DDD
表2:基本工资表:
编号 姓名 金额
1 AAA 100
2 BBB 200
3 CCC 300
4 DDD 400
表3:效益表:
编号 类型 数量
1 A 1
1 B 1
2 A 1
表4:总计表
编号 姓名 基本工资 类型A 类型B 类型C A类型报酬 B类型报酬 C类型报酬 其他所得 总计
1 AAA
2 BBB
3 CCC
4 DDD
说明:表1、2、3、4中的编号是公司职员编号与姓名一一对应,表3是每笔业务一条记录,表4是总工资表要求有人事表中所有编号、姓名,求表4,表4可以是已建好空表,可以是新建表。总计可以不算。
不知道一条语句能不能搞定,多条也行!分不够尽管说,全部给你都可以(虽然没有多少分)
如果类型A,B......Z....ZZ....AZZ...不确定.一条SQL语句搞不定!!
人事表里有:代号,姓名,岗位(可能是:司机,卖票的),基础工资
效益表里有:代号,类型(可能值:快,普,慢),区段(可能值:东,西,南,北),趟数(永是1,一趟统计一次)
总表里有:代号,姓名,岗位,东快趟数,东慢趟数...北慢趟数,合计趟,基础工资,其他,实得。
实得=基础工资+岗位单价*东快趟数+...岗位单价*北慢趟数+其他
难就难在:不同的岗位,单趟价不同,不同的类型,单趟价不同,不同的区段,单趟价不同,不过这些单趟价已经定好是常数,其他是另外导入的,应置0,总表可以用SQL生成,也可以用ACCESS建个空表往里添加。VC+ADO+ACCESS。
while(!m_pRecordsetJBZL/*人事表*/->adoEOF){
m_pRecordsetGZ/*总表*/->AddNew();
m_pRecordsetGZ->PutCollect("时间", _variant_t("2005"));//_variant_t()
_variant_t daihao;
daihao=m_pRecordsetJBZL->GetFields()->GetItem(_variant_t((long)3))->Value;
m_pRecordsetGZ->PutCollect("代号", _variant_t(daihao));//_variant_t()
////////////////////
_variant_t name;
name=m_pRecordsetJBZL->GetFields()->GetItem(_variant_t((long)4))->Value;
m_pRecordsetGZ->PutCollect("姓名", _variant_t(name));//_variant_t()
/////////////////////
_variant_t zhiwu;
zhiwu=m_pRecordsetJBZL->GetFields()->GetItem(_variant_t((long)9))->Value;
m_pRecordsetGZ->PutCollect("职务", _variant_t(zhiwu));//_variant_t()
///////////////
CString ss;
_variant_t sqlstr;
ss=daihao.bstrVal;
sqlstr="select * from TS where Qd/*区段*/=275 and Dh/*代号*/="+ss;
m_pRecordsetTS->Open//////////////这里要关闭记录集(sqlstr,m_pConnection.GetInterfacePtr),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t dongzhi=m_pRecordsetTS->GetRecordCount();
///////////////
dongzhi=m_pRecordsetJBZL->GetFields()->GetItem(_variant_t((long)9))->Value;
m_pRecordsetGZ->PutCollect("东快",dongzhi);//_variant_t()
///////////////
m_pRecordsetTS->Close();/////////////这里要关闭记录集
sqlstr="select * from TS where Qd=275 and Gz/*类型*/=11 and Dh="+ss;
m_pRecordsetTS->Open(sqlstr,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t dongjie=m_pRecordsetTS->GetRecordCount();
m_pRecordsetGZ->PutCollect("东普",dongjie);
///////////////////////////////
....................
m_pRecordsetGZ->Update();
m_pRecordsetJBZL->MoveNext();
m_pRecordsetTS->Close();/////////////这里要关闭记录集
}
这样每次开关记录特慢,ADO对象里没有像DELPHI里面的DataSet.SQL.Clear()方法吗,怎么样做才能在DataSet对象上多次执行查询操作呢?ADO的存储过程怎么调用?谁有调试过的源程序啊,我在网上下了几个都出现程序异常错误。
下面语句供参考:select
(
select B.类型慢 * B类型东慢的趟数合计 from
(select d.*,e.* from 趟数表 d LEFT OUTER JOIN 类型表 e ON d.类型ID=e.类型ID ) B
where B.userid=T.useid
) as 东慢, (
select B.类型快 * B类型东快的趟数合计 from
(select d.*,e.* from 趟数表 d LEFT OUTER JOIN 类型表 e ON d.类型ID=e.类型ID ) B
where B.userid=T.useid
) as 东快,from table_name t