数据库表机构内容如下:
id(主)  nid           date_time         n1     n2       n3       n4             n5
1 87 2010-03-30 00:00:00 62 16 20 25.81%         NULL
2 87 2010-03-31 00:00:00 54 17 18 31.48%   NULL
3 88 2010-03-30 00:00:00 65 19 22 29.23%         NULL
4 88 2010-03-31 00:00:00 58 18 21 31.03%         NULL如何转换成下面的格式:
     日期                  87                                88
2010-03-30   62   16   20  25.81%  null        65   19   22   29.23%  null
2010-03-31   54   17   18  31.48%  null        58   18   21   31.03%  null   
用sql语句如何实现?

解决方案 »

  1.   

    sql多少 你每日的记录条数是固定的么?
      

  2.   

    是的,是报表
    我想用HQL语句直接查处封装,然后界面上直接迭代对象。
      

  3.   

    这个还是用报表来实现吧 用SSRS或者水晶报表都容易实现
      

  4.   

    数据库用的是SQL Server 2008 。
      

  5.   

    我也建义前台,即来在SQL,就回个SQL的吧:--------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-24 10:55:00
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --  Blog   : http://blog.csdn.net/htl258
    --------------------------------------------------------------------------
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([id] INT,[nid] INT,[date_time] DATETIME,[n1] INT,[n2] INT,[n3] INT,[n4] NVARCHAR(10),[n5] NVARCHAR(10))
    INSERT [tb]
    SELECT 1,87,N'2010-03-30',62,16,20,N'25.81%',NULL UNION ALL
    SELECT 2,87,N'2010-03-31',54,17,18,N'31.48%',NULL UNION ALL
    SELECT 3,88,N'2010-03-30',65,19,22,N'29.23%',NULL UNION ALL
    SELECT 4,88,N'2010-03-31',58,18,21,N'31.03%',NULL
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    SELECT * 
    FROM (
    SELECT [DATE_TIME],NID,
     ISNULL(LTRIM(N1),'NULL')+' '+ISNULL(LTRIM(N2),'NULL')+' '+ISNULL(LTRIM(N3),'NULL')
    +' '+ISNULL(LTRIM(N4),'NULL')+' '+ISNULL(LTRIM(N5),'NULL') AS NALL
    FROM TB
    ) T
    PIVOT(MAX(NALL) FOR NID IN([87],[88])) B
    /*
    DATE_TIME 87 88
    2010-03-30 00:00:00.000 62 16 20 25.81% NULL 65 19 22 29.23% NULL
    2010-03-31 00:00:00.000 54 17 18 31.48% NULL 58 18 21 31.03% NULL
    */
      

  6.   

    hql语句查询时如何封装数据?要建立一个新的VO吗?要建的话,那要有多少个属性,如果多几个用户的话,那对应的就会有87   88  89  90  等等,要是都设置为VO的属性是不现实的,那要如何封装数据,或者是在Struts2的Action中如何处理,好在界面上显示出来。
      

  7.   

    原来是hibernate,是啊,用的是Hibernate处理的数据库,可是这个报表该如何处理呢。
      

  8.   

    建议你用前台DATAGIRD实现树状结构,那样又好看,又好玩,不要老用SQL来玩这种占内存和锁的东西