table A  type  city    result   A     SH       10
   A     BJ       15
   B     BJ       20
   B     SH       15
   B     TJ       12
期望结果  Type  SH  BJ  TJ   A     10  15  
   B     15  20   12Sql或DataTable 都行,能解决就行

解决方案 »

  1.   

    sql里面有个行列转换的函数,你查下
      

  2.   

    declare @sql varchar(1000)set @sql = 'select  type '
    select @sql = @sql + ',SUM(case city when ''' + AA.city  +''' then result else 0 end) as ' + city from (select distinct city from a) as AA
    set @sql = @sql + ' from a group by type '
     
    --print @sqlexec(@sql)
      

  3.   

    DataTable dtColumns,dtTypes, dtData, dtAll;
                DataRow[] rows;
                DataRow newRow;            // 以下三行为伪代码
                dtColumns = "select distinct city from tb";
                dtTypes = "select distinct Type from tb"; 
                dtAll = "select * from tb";            foreach (DataRow dr in dtColumns.Rows)
                {
                    dtData.Columns.Add(dr["Name"].ToString(),"".GetType());
                }            foreach (DataRow dr in dtTypes.Rows)
                {
                    newRow = dtData.NewRow();                foreach (DataRow dr2 in dtColumns.Rows)
                    {
                        rows = dtAll.Select("Type='" + dr["Type"] + "' and city='" + dr2["city"].ToString() + "'");
                        if (rows.Length > 0)
                        {
                            newRow[dr2["city"]] = rows[0]["result"];
                        }
                    }
                    dtData.Rows.Add(newRow);
                }
      

  4.   

    哦,都揭帖了。。
    还是贴上多个思路吧,嘿嘿
    ===================================
            Dim dtb As New DataTable
            Dim dcol As New DataColumn("type")
            dtb.Columns.Add(dcol)
            dcol = New DataColumn("city")
            dtb.Columns.Add(dcol)
            dcol = New DataColumn("result")
            dtb.Columns.Add(dcol)        Dim drow As DataRow
            drow = dtb.NewRow
            drow("type") = "A"
            drow("city") = "SH"
            drow("result") = 10
            dtb.Rows.Add(drow)        drow = dtb.NewRow
            drow("type") = "A"
            drow("city") = "BJ"
            drow("result") = 15
            dtb.Rows.Add(drow)        drow = dtb.NewRow
            drow("type") = "B"
            drow("city") = "BJ"
            drow("result") = 20
            dtb.Rows.Add(drow)        drow = dtb.NewRow
            drow("type") = "B"
            drow("city") = "SH"
            drow("result") = 15
            dtb.Rows.Add(drow)        drow = dtb.NewRow
            drow("type") = "B"
            drow("city") = "TJ"
            drow("result") = 12
            dtb.Rows.Add(drow)        DataGrid1.DataSource = dtb
            DataGrid1.DataBind()        '==========开始转换==========        '如果城市还有很多,可从数据库中取,循环动态生成DataColumn        Dim dtbnew As New DataTable
            dcol = New DataColumn("type")
            dtbnew.Columns.Add(dcol)
            dcol = New DataColumn("SH")
            dtbnew.Columns.Add(dcol)
            dcol = New DataColumn("BJ")
            dtbnew.Columns.Add(dcol)
            dcol = New DataColumn("TJ")
            dtbnew.Columns.Add(dcol)
            '如果不止A,B两种类型,可以取得所有类型,然后循环解决
            Dim drows() As DataRow = dtb.Select("type='A'")
            drow = dtbnew.NewRow
            drow("type") = "A"
            For Each d As DataRow In drows
                drow.Item(d("city")) = d("result")
            Next
            dtbnew.Rows.Add(drow)
            drows = dtb.Select("type='B'")
            drow = dtbnew.NewRow
            drow("type") = "B"
            For Each d As DataRow In drows
                drow.Item(d("city")) = d("result")
            Next
            dtbnew.Rows.Add(drow)        DataGrid2.DataSource = dtbnew
            DataGrid2.DataBind()