这是我从数据库中根据一定条件查询出的结果。
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语句进行处理。 |
用下面的代码能实现:
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
其实是有id这一列的,不过是主键。谢谢了先
@Servers: 这里的ID跟你表里的ID意义不同。这个ID是属于数据的一个批次,从你的数据看,连续的“收缩压上 舒张压下 血糖餐前 血糖餐后 体温 心率”是一个数据批次,那么这几条数据应该是有一个相同的批次编号来标识的。
要求是不能在数据库中做对sql语句进行处理????
是的,从数据库中返回了一个DataSet。对这个进行处理
你生成dataset,然後,包含一個中間的列名。裏面放的數據是collecttime.subing(0,collecttime.length-2)的數據
然後用這個中間列進行分組,然後輸出分組內容。
不太会啊,能不能具体点呢。
@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; }