数据库表的结构为
时间         发生仓库    产品名称    入仓数   出仓数   备注
2003-7-1      A           主板       150     Null    生产入库
2003-7-1      B           主板       100     Null    生产入库
2003-7-1      A           主板       Null    50      发货
发生仓库可以动态增加,即现在只有A,B仓库,但以后可能有C,D仓库。
现在用户要求以下的报表形式:
                           A仓库             B仓库     
时间          备注       收入  发出        收入   发出 
2003-7-1     生产入库    150    0          100    0
2003-7-1     发货         0     50          0     0
各位高手请讨论下这个报表应该怎么做呢!

解决方案 »

  1.   

    这个问题到SQL Server版比较好。ps:关注,学习。
      

  2.   

    这是一个“行列转换”问题,因为列是未知的,所以需要用临时表来解决。大概思路:1、建一存储过程
    2、定义游标取出“发生仓库” select distinct 发生仓库 from TableName
    3、创建临时表 create table #Tem(......),游标循环
    4、把数据写入临时表
    5、select * from #Tem
      

  3.   


    **** 深圳的DELPHI爱好者聚会通知! ****详情请看:
    http://www.delphibbs.com/delphibbs/dispq.asp?LID=1619353
      

  4.   

    看看这样行不select 备注,sum(收入),发出 where 发生仓库='A' group by 备注 union select 备注,收入,sum(发出) where 发生仓库='B' group by 备注
      

  5.   

    我觉得还有一个问题,除了用视图可以把需要的数据生成,但如何显示给用户呢?因为仓库的字段是动态的,那么DELPHI的界面也要动态生成!
      

  6.   

    我是用StringGrid加Panel来做的,Panel用来显示仓库,StringGrid用来显示其余的数据.即是每个收入、发出、结余对应一个Panel(仓库名称),这样做要考虑动态增加Panel和StringGrid的列,而且要考虑StringGrid的Left Top 大于1的情况下Panel也要遇之适应!
    很复杂啊!
      

  7.   

    前面的有问题,现在有新方案:
    1、创建两个新视图
    create view A_WareHouse
    as
    select 时间,备注,入仓数 as A仓库收入,出仓数 was A仓库发出 where 发生仓库='A'  group by 时间,备注create view B_WareHouse
    as
    select 时间,备注,入仓数 as B仓库收入,出仓数 was B仓库发出 where 发生仓库='B'  group by 时间,备注2、使用连接
    select * from A_WareHouse as A JOIN B_WareHouse as B where A.时间=B.时间 AND A.备注=B.备注试试看
      

  8.   

    各位高手,就算视图建好了,但如何在界面显示出来给用户看呢。呢过系我把此问题放在DELPHI基础类的原因。
    我是用StringGrid加Panel来做的,Panel用来显示仓库,StringGrid用来显示其余的数据.即是每个收入、发出、结余对应一个Panel(仓库名称),这样做要考虑动态增加Panel和StringGrid的列,而且要考虑StringGrid的Left Top 大于1的情况下Panel也要遇之适应!
    很复杂啊!