样表:Orders
字段:goodsName(物品名)  applyPerson(申请人) classify(物品类别) department(部门)totalPrice(总金额)求查询结果如下:           类别1     类别2    类别3部门1      金额1     金额2    金额3部门2       ..        ..       ..部门3       ..        ..       ..
 
表中的 部门 和 类别 的个数不固定,因此查询出的数据表的行数和列数都是不固定的先谢谢各位大侠了!

解决方案 »

  1.   

    行转列每天都有好几贴,翻翻前面的帖子吧,精华贴也有详细说。
    个人不赞成在sql中执行这种操作。select 部门,sum(金额)
    from table
    group by 部门, 类别余下的排版用外部程序实现吧。
      

  2.   

    你的要求需要用动态SQL来实现,参考下面链接
    http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
      

  3.   

    http://blog.csdn.net/holicc/article/details/7904048
      

  4.   

    动态语句先找出要转换的列名,用动态语句拼凑 pivot 语句
      

  5.   


    /* 
    Orders
    字段:goodsName(物品名) applyPerson(申请人) classify(物品类别) department(部门)totalPrice(总金额)
    */CREATE TABLE OrderS(GoodsName NVARCHAR(20),ApplyPerson NVARCHAR(10),Classify NVARCHAR(20),Department NVARCHAR(10),TotalPrice DECIMAL(22,2))INSERT INTO OrderS
    SELECT 'R0204301','01','A','SA',8102
    UNION ALL
    SELECT 'R0204302','02','A','HR',12
    UNION ALL
    SELECT 'R0204302','02','B','HR',21
    UNION ALL
    SELECT 'R0204302','02','B','HR',1DECLARE @Sql NVARCHAR(4000)
    SET @Sql =' '
    SELECT @Sql =@Sql+'SUM(CASE WHEN Classify ='''+Classify+''' THEN TotalPrice ELSE 0 END) AS '+Classify+',' FROM OrderS GROUP BY ClassifySET @Sql = 'SELECT Department,'+LEFT(@Sql,LEN(@Sql)-1)+' FROM OrderS GROUP BY Department'EXEC (@Sql)/*
    Department A                                       B
    ---------- --------------------------------------- ---------------------------------------
    HR         12.00                                   22.00
    SA         8102.00                                 0.00(2 行受影响)
    */