首页 新闻 会员 周边 捐助

在线等:数据行列转换问题[

0
悬赏园豆:60 [已解决问题] 解决于 2012-05-12 12:39
这是我从数据库中根据一定条件查询出的结果。
collectdata typename collecttime
120.00 收缩压上 2012/5/11 13:19:45
90.00 舒张压下 2012/5/11 13:19:46
34.00 血糖餐前 2012/5/11 13:19:47
36.00 血糖餐后 2012/5/11 13:19:48
37.50 体温 2012/5/11 13:19:49
150.00 心率 2012/5/11 13:19:50
180.00 收缩压上 2012/5/11 16:30:31
110.00 舒张压下 2012/5/11 16:30:32
33.00 血糖餐前 2012/5/11 16:30:33
38.00 血糖餐后 2012/5/11 16:30:34
39.00 体温 2012/5/11 16:30:35
190.00 心率 2012/5/11 16:30:36

最后想要的结果如下:
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
求各位帮下忙了,先谢谢了。要求是不能在数据库中做对sql语句进行处理。
 
 
Servers的主页 Servers | 初学一级 | 园豆:45
提问于:2012-05-11 14:10
< >
分享
最佳答案
0

用下面的代码能实现:

SELECT TOP 1000 [id]
      ,max(case typename when '收缩压上' then collectdata else null end) as 收缩压上
      ,max(case typename when '舒张压下' then collectdata else null end) as 舒张压下
      ,max(case typename when '血糖餐前' then collectdata else null end) as 血糖餐前
      ,max(case typename when '血糖餐后' then collectdata else null end) as 血糖餐后
      ,max(case typename when '体温' then collectdata else null end) as 体温
      ,max(case typename when '心率' then collectdata else null end) as 心率
  FROM [sdlog].[dbo].[Table_1] group by id

这里,我增加了一个名为ID的字段,一行数据相同的ID,数据表的内容为:(没使用日期了,所以就没写)

id collectdata typename
1 120 收缩压上
1 90 舒张压下
1 34 血糖餐前
1 36 血糖餐后
1 38 体温
1 150 心率
2 180 收缩压上
2 110 舒张压下
2 33 血糖餐前
2 38 血糖餐后
2 39 体温
2 190 心率

 

查询后的结果为:

 

id 收缩压上 舒张压下 血糖餐前 血糖餐后 体温 心率
1 120 90 34 36 38 150
2 180 110 33 38 39 190

收获园豆:50
无之无 | 大侠五级 |园豆:5095 | 2012-05-11 14:43

其实是有id这一列的,不过是主键。谢谢了先

Servers | 园豆:45 (初学一级) | 2012-05-11 14:58

@Servers: 这里的ID跟你表里的ID意义不同。这个ID是属于数据的一个批次,从你的数据看,连续的“收缩压上 舒张压下 血糖餐前 血糖餐后 体温 心率”是一个数据批次,那么这几条数据应该是有一个相同的批次编号来标识的。

无之无 | 园豆:5095 (大侠五级) | 2012-05-11 15:11
其他回答(2)
0

要求是不能在数据库中做对sql语句进行处理????

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-05-11 14:23

是的,从数据库中返回了一个DataSet。对这个进行处理

支持(0) 反对(0) Servers | 园豆:45 (初学一级) | 2012-05-11 14:28
0

你生成dataset,然後,包含一個中間的列名。裏面放的數據是collecttime.subing(0,collecttime.length-2)的數據

然後用這個中間列進行分組,然後輸出分組內容。

收获园豆:10
無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-11 15:17

不太会啊,能不能具体点呢。

支持(0) 反对(0) Servers | 园豆:45 (初学一级) | 2012-05-11 15:26

@Servers: 

        private static DataSet GetInidsPoseq()
        {

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            dt.Columns.Add("PO_SEQ");
            dt.Columns.Add("CO_No");
            dt.Columns.Add("PC_To_Plan_Unit");
            dt.Columns.Add("Plant_Flag");
            dt.Columns.Add("PC_To_Plan_Unit");
            ds.Tables.Add(dt);
            return ds;

        }
            DataSet ds = GetInidsPoseq();
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["PO_SEQ"] = dt.Rows[i]["CO_No"].ToString().Substring(0, dt.Rows[i]["CO_No"].ToString().Length - 2);
            }
var re = from t in dt.AsEnumerable() group t by t.Field<string>("PO_SEQ") into s select new { s.Key, }; foreach (var item in re) { var m1 = from m in dt.AsEnumerable() where m.Field<string>("PO_SEQ") == item.Key select m; }


支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-11 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册