㊣㊣㊣㊣㊣㊣这样的查询如何实现数据库问题,兄弟们帮我一吧㊣㊣㊣㊣㊣。
一、开发环境
数据库:sql server2000
开发工具:delphi
结构:三层
二、问题描述
   |      动态项目一      |      动态项目二      |       动态项目n      |
   |  当天     |累计      |  当天     |累计      |  当天      |累计     | 
   |进|销|存|分|进|销|分  |进|销|存|分|进|销|分  |进|销|存|分|进|销|分  |
要求:传入当前时间,计算出如上数据

解决方案 »

  1.   

    还有200分一快给,欢迎兄弟们出点子,参与有分。
    http://expert.csdn.net/Expert/topic/2455/2455774.xml?temp=.1538813
      

  2.   

    举个例子:
    Create table test (name char(10),km char(10),cj int)
    go
    insert test values('张三','语文',80)
    insert test values('张三','数学',86)
    insert test values('张三','英语',75)
    insert test values('李四','语文',78)
    insert test values('李四','数学',85)
    insert test values('李四','英语',78)
    想得到:
    姓名   语文   数学   英语
    张三   80     86     75
    李四   78     85     78declare @sql varchar(8000)
    set @sql = 'select name'
    select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
     from (select distinct km from test) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)
      

  3.   

    1、我看说有的业务逻辑都放到中间
    2、以xml方式返回数据,客户端只显示(格式是你定义的,哪怕其它项目调用也横方便)
    个人意见
      

  4.   

    不太明白你的建表逻辑,也不知道你的数据库结构,看看下面的帖子,也许对你有帮助
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=170924
      

  5.   

    计划是用存储过程实现,数据量现有几百万条,以1万条/天递增。
    问题是:
      1.数据表动态列实现
      2.生成用户要的数据格式,如题
      3.速度不能太慢,<5s
    我不要语句,有思路就好
      

  6.   

    1、如果你的数据进入后不会变化,建议你做一次数据抽取,这样速度一定<5s
    2、得到数据格式我不明白那里难?
      

  7.   

    http://expert.csdn.net/Expert/topic/2440/2440306.xml?temp=.6941645
     [交流]行列转换 
      

  8.   

    一个进销存,本来我是横项统计的,是这样的:
    客户A                         进     销     存      分
       产品大类(比如是A8)          
           产品小类(比如是A8白)
           产品小类(比如是A8金)
       产品大类 (比如A9)
           产品小类 
           ......
    客户B                         进     销     存      分
       产品大类(比如是A8)          
           产品小类(比如是A8白)
           产品小类(比如是A8金)
       产品大类 (比如A9)
           产品小类 
           ......
    客户不满意,非要这样统计
                                  A8                  |         A9
                                                      
                        当天      |        累计       |     当天  |     累计  
       客户名称 |进   销   存   分|  进    销    分   |进 销 存 分| 进  销  分   
         我现在主要从两个表中数据:
      1.Stock_items:库存表
      2.Stock_Operation:库操做表产品大类是用户定义的,是不固定的,产品小类是财务科目,客户对大类小类都要查询,不过这个统计不关心小类。
      
         
      

  9.   

    compute sum(price)
    order by ...分类累计要用到这个语句...,比如按照项目来分类,分类计算每个项目的价格总和
      

  10.   

    用纯SQL去实现的情况下,是可以实现的,
    不过那样写出来的SQL代码真的很看不清。
    而且很不通用!!!我曾经也在MSSQL版发过类似的贴子,
    只是至今无人帮我解决罢了。
    贴子是http://expert.csdn.net/Expert/topic/2146/2146114.xml?temp=.2678491
    可以去看看他们的答案!!!!象这样的动态列的情况下的SQL确实不容易写,
    过几天我发一个解决方案吧。
    是用DELPHI和MSSQL代码来实现的。
    只需要写少量的SQL代码再加上一个类就可以处理了。
    现在我在网吧上网,
    不能上传源代码,
    过几天我传上来了后通知你吧。
      

  11.   

    谢谢各位
    --------------------------------------------------------------------
    看尽悲伤,庸人自扰不平事。叹尽荒凉,海阔天空谁人知。狂风劲兮,百花飘
    扬乱舞香。捏花一笑,海不扬波断肠心!
    广告:http://delphicode.yeah.net
      

  12.   

    tiexinliu(铁心刘) ,还没有解决吗?
      

  13.   

    我现在也在处理类似的问题,也是有很多个动态的项目,如果一个一个的计算,速度很慢,数据在20万的时候,打开一个标需要二十几分钟,不过我是把项目放在行上,而不是列上。列上是季度(月份),下面跟着数量或者单价、金额,:
            一季度          二季度          三季度
    名称:数量 单价 金额  数量 单价 金额  数量 单价 金额
    项目1  ....  ...  ...  .....而且一极表头(季度或月份列)和二级表头(数量或金额)都不是固定的,可以根据需要动态调节的,如果你的是固定的那么应该好办得多,下面是我用来组织数据的sql,仅供参考INSERT INTO TABLE1(列1,列2,.....)
    SELECT ZWSJ_XMBH,
    J1JE=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSJE ELSE 0 END ),
    J2JE=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSJE ELSE 0 END ),
    J3JE=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSJE ELSE 0 END ),
    J4JE=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSJE ELSE 0 END ),
    J1SL=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSSL ELSE 0 END ),
    J2SL=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSSL ELSE 0 END ),
    J3SL=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSSL ELSE 0 END ),
    J4SL=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSDJ ELSE 0 END ),
    J1DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSDJ ELSE 0 END ),
    J2DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSDJ ELSE 0 END ),
    J3DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSDJ ELSE 0 END ),
    J4DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSDJ ELSE 0 END )
    FROM ZWSJ
    WHERE ZWSJ_YEAR='2004' 
    GROUP BY ZWSJ_XMBHJ1代表在数据库中是第一季度的数据。
    在20万的数据量中,执行速度很快<1s
      

  14.   

    我现在也在处理类似的问题,也是有很多个动态的项目,如果一个一个的计算,速度很慢,数据在20万的时候,打开一个标需要二十几分钟,不过我是把项目放在行上,而不是列上。列上是季度(月份),下面跟着数量或者单价、金额,:
            一季度          二季度          三季度
    名称:数量 单价 金额  数量 单价 金额  数量 单价 金额
    项目1  ....  ...  ...  .....而且一极表头(季度或月份列)和二级表头(数量或金额)都不是固定的,可以根据需要动态调节的,如果你的是固定的那么应该好办得多,下面是我用来组织数据的sql,仅供参考INSERT INTO TABLE1(列1,列2,.....)
    SELECT ZWSJ_XMBH,
    J1JE=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSJE ELSE 0 END ),
    J2JE=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSJE ELSE 0 END ),
    J3JE=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSJE ELSE 0 END ),
    J4JE=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSJE ELSE 0 END ),
    J1SL=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSSL ELSE 0 END ),
    J2SL=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSSL ELSE 0 END ),
    J3SL=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSSL ELSE 0 END ),
    J4SL=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSDJ ELSE 0 END ),
    J1DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J1' THEN ZWSJ_YSDJ ELSE 0 END ),
    J2DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J2' THEN ZWSJ_YSDJ ELSE 0 END ),
    J3DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J3' THEN ZWSJ_YSDJ ELSE 0 END ),
    J4DJ=SUM(CASE ZWSJ_YSQJ WHEN 'J4' THEN ZWSJ_YSDJ ELSE 0 END )
    FROM ZWSJ
    WHERE ZWSJ_YEAR='2004' 
    GROUP BY ZWSJ_XMBHJ1代表在数据库中是第一季度的数据。
    在20万的数据量中,执行速度很快<1s
      

  15.   

    我的列也是动态的,动态组织列名,然后根据列名组织临时表的结构,然后用上面的sql将数据导入到临时表中,关键就是组织列名和结构语句的问题,其实也不难,根据条件可以组织出来的,只要需要的数据内容确定就可以组织数据了
      

  16.   

    使用case和sum/max组合应该可以实现
    nhdj(用潘婷的和尚)的方法不错
    以前也做过类似的东西
    不过如果对数据库采用完全面向对象方法
    可以很好解决这类问题
      

  17.   

    解决了,下班揭贴
    --------------------------------------------------------------------
    看尽悲伤,庸人自扰不平事。叹尽荒凉,海阔天空谁人知。狂风劲兮,百花飘
    扬乱舞香。捏花一笑,海不扬波断肠心!
    http://delphicode.yeah.net