表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.   

    类型A,B,C如果是定的,倒是有办法.
    如果类型A,B......Z....ZZ....AZZ...不确定.一条SQL语句搞不定!!
      

  2.   

    举个例子:客运管理系统
    人事表里有:代号,姓名,岗位(可能是:司机,卖票的),基础工资
    效益表里有:代号,类型(可能值:快,普,慢),区段(可能值:东,西,南,北),趟数(永是1,一趟统计一次)
    总表里有:代号,姓名,岗位,东快趟数,东慢趟数...北慢趟数,合计趟,基础工资,其他,实得。
    实得=基础工资+岗位单价*东快趟数+...岗位单价*北慢趟数+其他
    难就难在:不同的岗位,单趟价不同,不同的类型,单趟价不同,不同的区段,单趟价不同,不过这些单趟价已经定好是常数,其他是另外导入的,应置0,总表可以用SQL生成,也可以用ACCESS建个空表往里添加。VC+ADO+ACCESS。
      

  3.   

    如果不行的话我就要用while()了,但是有个问题:
    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的存储过程怎么调用?谁有调试过的源程序啊,我在网上下了几个都出现程序异常错误。
      

  4.   

    可以的,也就是十五个可能嘛.
    下面语句供参考: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