insert into 流水帐 ([人员编号],[代码],[名称],[规格],[单位],[单价],[数量],[分类],[应交金额]) 
 select 档案库.[人员编号],
        [代码]=费用名称.[代码],
        [名称]=费用名称.[名称],
        [规格]=费用名称.[规格],
        [单位]=费用名称.[单位],
        [单价]=费用名称.[单价],
        [数量]=费用名称.[数量],
        [分类]=费用名称.[分类],
        [实交金额]=(费用名称.[单价] * 费用名称.[数量]),
        [应交金额]=(费用名称.[单价] * 费用名称.[数量])
 from 档案库 ,房间,费用名称
 where  档案库.标志=1 
    and 档案库.人员编号=房间.人员编号
    and 房间.[日费用]=1 
    and 费用名称.[日收取] = 1
 order by 档案库.[人员编号],
        费用名称.[代码]

解决方案 »

  1.   

    INSERT INTO [流水帐]([人员编号],[代码],[名称],[规格],[单位],
      [单价],[数量],[分类],[实交金额],[应交金额])
    SELECT A.[人员编号],B.[代码],B.[名称],B.[规格],B.[单位],B.[单价],
      B.[数量],B.[分类],B.[单价] * B.[数量],B.[单价]*B.[数量]
    FROM (SELECT A.[人员编号] FROM [档案库] A INNER JOIN [房间] B 
          ON A.[人员编号]=B.[人员编号] AND B.[日费用]=1 WHERE A.标志=1) A
    CROSS 
         (SELECT * FROM [费用名称] WHERE [日收取] = 1)
      

  2.   

    在sql server 中建一个视图吧,用那里的工具帮你建,很方便的。
    如果不愿意用视图,把视图的代码抄下来,再删除,OK?
      

  3.   

    档案库表和费用名称表没有什么关联吗?这样的话交叉查询,将会得到的结果是满足条件的[人员编号]的记录(档案库.标志=1 and 房间.[日费用]=1 and 档案库.人员编号=房间.人员编号)乘以满足条件的费用的记录(费用名称.[日收取] = 1),是这样吗?是这样楼上的tj_dns(愉快的登山者)的写法就能得到你的结果。
    你自己的写法只要这样改一改就可以sql$ = "insert into 流水帐 ([人员编号],[代码],[名称],[规格],[单位],[单价],[数量],[分类],[应交金额]) " _
    & " select 档案库.[人员编号],[代码]=费用名称.[代码],[名称]=费用名称.[名称],[规格]=费用名称.[规格],[单位]=费用名称.[单位],[单价]=费用名称.[单价],[数量]=费用名称.[数量]," _
                & "[分类]=费用名称.[分类],[实交金额]=(费用名称.[单价] * 费用名称.[数量]),[应交金额]=(费用名称.[单价] * 费用名称.[数量])" _
                & " from 费用名称,档案库 left join 房间 on 档案库.人员编号=房间.人员编号" _
                & " where  档案库.标志=1 and 房间.[日费用]=1 and 费用名称.[日收取] = 1"Join的用法,你自己查看帮助就可以了