日期:2014-05-17  浏览次数:20429 次

我又来了,还是那个数据行列转换问题,求解
表:t_selfcheck

表:t_selfchecktype

这是跟据条件查询出的结果


上面是我查询的某人当天的记录,但最后想要的结果是数据的行列转换下,结果如下:

收缩压上 舒张压下 血糖前 血糖后 体温 心率 时间

120 90 34 36 37.50 150 13时19分

180 110 33 38 39 190 16时30分

求各位帮帮忙 啊,这个不能在数据库中进行操作啊。只能在页面后台进行数据行列转换。求解。

求后台代码。



------解决方案--------------------
固定的比较简单,用阅读器读取记录(用DataTable也可以),确定行号和列表,填充即可。
------解决方案--------------------
第一个方案:在oracle后台创建一个函数和一个临时表 ,利用函数转换将行列数据的结果写入临时表。前台调用临时表的数据就行。

第二个方案:在程序中创建两个databale1, databale2 。
databale1接收数据集的原始数据,然后遍历databale1 将行列数据整理 存入databale2,不过这种执行效力低些。

推荐用第一个方案。
------解决方案--------------------
第一个方案:在oracle后台创建一个函数和一个临时表 ,利用函数转换将行列数据的结果写入临时表。前台调用临时表的数据就行。

第二个方案:在程序中创建两个databale1, databale2 。
databale1接收数据集的原始数据,然后遍历databale1 将行列数据整理 存入databale2,不过这种执行效力低些。

推荐用第一个方案。
------解决方案--------------------
假设以1楼最后一个图片中信息:
C# code
        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();

------解决方案--------------------
地址贴错了,运行结果如下:

------解决方案--------------------
dt换成你从数据库中查询出来的数据。
C# code

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