表:t_selfcheck表:t_selfchecktype这是跟据条件查询出的结果
上面是我查询的某人当天的记录,但最后想要的结果是数据的行列转换下,结果如下:收缩压上 舒张压下 血糖前 血糖后 体温 心率 时间120   90  34 36 37.50 150 13时19分180 110 33 38 39 190 16时30分求各位帮帮忙 啊,这个不能在数据库中进行操作啊。只能在页面后台进行数据行列转换。求解。求后台代码。

解决方案 »

  1.   

    t_selfcheck:t_selfchecktype:根据条件查出来的:
      

  2.   

    固定的比较简单,用阅读器读取记录(用DataTable也可以),确定行号和列表,填充即可。
      

  3.   

    第一个方案:在oracle后台创建一个函数和一个临时表 ,利用函数转换将行列数据的结果写入临时表。前台调用临时表的数据就行。第二个方案:在程序中创建两个databale1, databale2 。
    databale1接收数据集的原始数据,然后遍历databale1 将行列数据整理 存入databale2,不过这种执行效力低些。推荐用第一个方案。 
      

  4.   

    第一个方案:在oracle后台创建一个函数和一个临时表 ,利用函数转换将行列数据的结果写入临时表。前台调用临时表的数据就行。第二个方案:在程序中创建两个databale1, databale2 。
    databale1接收数据集的原始数据,然后遍历databale1 将行列数据整理 存入databale2,不过这种执行效力低些。推荐用第一个方案。 
      

  5.   

    假设以1楼最后一个图片中信息:
    DataTable dt = new DataTable();
    dt.Columns.Add("收缩压上", typeof(int));
    dt.Columns.Add("舒张压下", typeof(int));
    dt.Columns.Add("血糖餐前", typeof(int));
    dt.Columns.Add("血糖餐后", typeof(int));
    dt.Columns.Add("体温", typeof(float));
    dt.Columns.Add("心率", typeof(int));
    dt.Columns.Add("时间", typeof(string));
    OleDbData md = new OleDbData();
    md.ExecuteReader("select * from Test"); //请改成自己的sql语句
    DataRow dr = null;
    while (md.Reader.Read())
    {
    if (md.Reader["typename"].ToString() == "收缩压上")
    {
    dr = dt.NewRow();
    dt.Rows.Add(dr);
    }
    dr[md.Reader["typename"].ToString()] = md.Reader["collectdata"];
    if (md.Reader["typename"].ToString() == "心率")
    dr["时间"] = ((DateTime)md.Reader["collecttime"]).ToString("HH时mm分");
    }
    md.Close();
    GridView1.DataSource = dt;
    GridView1.DataBind();
    这里用了数据库操作类OleDbData,你改成原生ADO.NET就行了。
      

  6.   

    dt换成你从数据库中查询出来的数据。static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("collectdata");
                dt.Columns.Add("typename");
                dt.Columns.Add("collecttime");
                dt.Rows.Add(new object[] { "120.00", "收缩压上", "2012/5/11 13:19:45" });
                dt.Rows.Add(new object[] { "90.00", "舒张压下", "2012/5/11 13:19:46" });
                dt.Rows.Add(new object[] { "34.00", "血糖餐前", "2012/5/11 13:19:47" });
                dt.Rows.Add(new object[] { "36.00", "血糖餐后", "2012/5/11 13:19:48" });
                dt.Rows.Add(new object[] { "37.50", "体温", "2012/5/11 13:19:49" });
                dt.Rows.Add(new object[] { "180.00", "收缩压上", "2012/5/11 16:30:31" });
                dt.Rows.Add(new object[] { "110.00", "舒张压下", "2012/5/11 16:30:31" });
                dt.Rows.Add(new object[] { "33.00", "血糖餐前", "2012/5/11 16:30:33" });
                dt.Rows.Add(new object[] { "38.00", "血糖餐后", "2012/5/11 16:30:34" });
                dt.Rows.Add(new object[] { "39.00", "体温", "2012/5/11 16:30:35" });
                dt.Rows.Add(new object[] { "190.00", "心率", "2012/5/11 16:30:36" });
                dt.Rows.Add(new object[] { "150.00", "心率", "2012/5/11 13:19:50" });
                DataTable newDt = new DataTable();
                Dictionary<string, int> dicCount = new Dictionary<string, int>();
                int index = 0;
                foreach (DataRow row in dt.Rows)
                {
                    if (!dicCount.ContainsKey(row["typename"].ToString()))
                    {
                        dicCount.Add(row["typename"].ToString(), index++);
                    }
                }
                Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
                List<string> list;
                string key = string.Empty;
                foreach (DataRow row in dt.Rows)
                {
                    key = Convert.ToDateTime(row["collecttime"]).ToString("HH时mm分");
                    if (dic.ContainsKey(key))
                    {
                        list = dic[key];
                        list[dicCount[row["typename"].ToString()]] = row["collectdata"].ToString();
                        dic[key] = list;
                    }
                    else
                    {
                        list = new List<string>();
                        list.AddRange(new string[dicCount.Count]);
                        list.Add(key);
                        list[dicCount[row["typename"].ToString()]] = row["collectdata"].ToString();
                        dic.Add(key, list);
                    }
                }
                foreach (KeyValuePair<string, int> k in dicCount)
                    newDt.Columns.Add(k.Key);
                newDt.Columns.Add("时间");
                foreach (KeyValuePair<string, List<string>> k in dic)
                    newDt.Rows.Add(k.Value.ToArray<string>());
                /*
                    120.00 90.00 34.00 36.00 37.50 150.00 13时19分
                180.00 110.00 33.00 38.00 39.00 190.00 16时30分
                 */            Console.ReadKey();
            }
      

  7.   


    "select * from Test"  查的是什么?是第三章图的那个结果吗??用的是Oracle数据库,就是中见while里面该怎么写啊
      

  8.   

    看6楼的第一句话,while当中md.Reader就是个阅读器。