表一:
学生编号 项目编号 标准金额 实际金额 已收金额 托欠金额
10401001 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 2 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
表二:
项目编号 项目名称
1 代管费
2 住宿费
3 上机费
4 学费
要得到的查询结果:
学生编号 代管费 住宿费 上机费 学费 合计标准金额 合计实际金额 合计已收金额 合计托欠金额
10401001 200 200 200 200 800 800 800 0
10401002 200 0 200 200 600 600 600 0
向各位高手请教:应如何才能得到以上结果???

解决方案 »

  1.   

    你要的是不是这样
    select SUM(Case 项目编号 when '1' then 标准金额) as 代管费,SUM(Case 项目编号 when '2' then 标准金额) as 住宿费 from aaa where 你的条件
      

  2.   

    合计的写法
    select SUM(Case 项目编号 when '1' then 标准金额) as 代管费,SUM(Case 项目编号 when '2' then 标准金额) as 住宿费,(代管费 + 住宿费) as 合计金额 from aaa where 你的条件
      

  3.   

    我当时是这样解决的。
    用存储过程更好
    当然,用代码也一样
    首先获得数据库中种类。
    sqlsa = "SELECT 项目编号,项目名称 from 表2",
    sqlsa2 = "SELECT "rs.open sqlsa,conn,3,3'将找到的结果自动拼装SQL语句
    for i = 1 to rs.recordcount
        sqlsa2 = sqlsa2 + "SUM(Case 项目编号 when '" + rs.fields("项目编号").values +"' then 标准金额) as " + rs.fields("项目名称").values
    +","
    next isqlsa2 = left(sqlsa2,len(sqlsa2)-1)
    ......
    '就这样拼装就行了。很久没有用VB了,大概是这个样子吧。呵呵,提供思路
      

  4.   

    用一个sql语句的话,好麻烦的,N多的子查询阿.
    我试着写一个,不过没有第一项,你看看行不行.select 
    (select 标准金额(或者实际金额,或者已收金额,你自己看着办,下同) from 表1 where 学号='该生学号' and 项目编号=1) as '代管费',
    (select 标准金额 from 表1 where 学号='该生学号' and 项目编号=2) as '住宿费',
    (select 标准金额 from 表1 where 学号='该生学号' and 项目编号=3) as '上机费',
    (select 标准金额 from 表1 where 学号='该生学号' and 项目编号=4) as '学费',
    (select sum(标准金额) from 表1 where 学号='该学生号') as '合计标准金额',
    (select sum(实际金额) from 表1 where 学号='该学生号') as '合计实际金额',
    (select sum(已收金额) from 表1 where 学号='该学生号') as '合计已收金额',
    (select sum(拖欠金额) from 表1 where 学号='该学生号') as '合计托欠金额'就这样拉,你自己调试调试,中间可能有语法错误或者复制的时候的一些错误,毕竟自己没有调好.你应该能看懂自己改吧.
      

  5.   

    --建两个表:
    --Tab1(ID,XSBH,XMBH,BZJE,SJJE,YSJE,TQJE)
    --Tab2(ID,XMBH,XMMC)--方案1:两条语句
      先生成记录集(SELECT XMBH,XMMC FROM Tab_2 ORDER BY XMBH)
      然后在vb中生成以下select语句:
     select XSBH 
           ,代管费=ISNULL((SELECT BZJE FROM Tab_1 WHERE XSBH=T1.XSBH AND XMBH=1),0)
           ,住宿费=ISNULL((SELECT BZJE FROM Tab_1 WHERE XSBH=T1.XSBH AND XMBH=2),0)
           ,上级费=ISNULL((SELECT BZJE FROM Tab_1 WHERE XSBH=T1.XSBH AND XMBH=3),0)
           ,学费=ISNULL((SELECT BZJE FROM Tab_1 WHERE XSBH=T1.XSBH AND XMBH=4),0)
          ,标准金额=SUM(BZJE),实际金额=SUM(SJJE),应收金额=SUM(YSJE),拖欠金额=SUM(TQJE) 
          FROM Tab_1 AS T1 GROUP BY XSBH
    (中间四行是根据第一个记录集内容多少而定的)
     运行即可得到结果--方案2:一条语句
    DECLARE @c1 varchar(333)
    DECLARE @c2 varchar(33)
    DECLARE @cc varchar(3333)
    DECLARE @cc1 varchar(33)
    DECLARE @cc2 varchar(33)
    set @c1='=ISNULL((SELECT BZJE FROM Tab_1 WHERE XSBH=T1.XSBH AND XMBH='
    set @c2='),0)'
    set @cc=''
    DECLARE cursor1 CURSOR FOR SELECT XMMC,XMBH FROM Tab_2 --ORDER BY XMBH
    OPEN cursor1
    FETCH next FROM cursor1 into @cc1,@cc2
    set @cc=@cc+','+@cc1+@c1+@cc2+@c2
    WHILE @@FETCH_STATUS=0
    BEGIN
      FETCH next FROM cursor1 into @cc1,@cc2
      if (@@FETCH_STATUS<>-1) 
      set @cc=@cc+','+@cc1+@c1+@cc2+@c2
    END
    CLOSE cursor1
    DEALLOCATE cursor1
    set @cc='select 学生编号=XSBH'+@cc+',标准金额=SUM(BZJE),实际金额=SUM(SJJE)
                                       ,应收金额=SUM(YSJE),拖欠金额=SUM(TQJE) 
                                              FROM Tab_1 AS T1 GROUP BY XSBH'EXEC(@cc)
    运行直接得到结果。