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

yp19910928 2012-05-11 01:33:02
这是我从数据库中根据一定条件查询出的结果。
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语句进行处理。
...全文
241 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangwenquan123 2012-05-12
  • 打赏
  • 举报
回复
修改了下分组
        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();
}
huangwenquan123 2012-05-12
  • 打赏
  • 举报
回复

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[] { "150.00", "心率", "2012/5/11 13:19:50" });
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" });
DataTable newDt = new DataTable();
Dictionary<string, int> dicCount = new Dictionary<string, int>();
int index = 1;
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("yyyy/MM/dd 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[0] = key;
list.Add(row["collectdata"].ToString());
list[dicCount[row["typename"].ToString()]] = row["collectdata"].ToString();
dic.Add(key, list);
}
}
newDt.Columns.Add("时间");
foreach (KeyValuePair<string, int> k in dicCount)
newDt.Columns.Add(k.Key);
foreach (KeyValuePair<string, List<string>> k in dic)
newDt.Rows.Add(k.Value.ToArray<string>());
/*
2012-05-11 13:19 120.00 90.00 34.00 36.00 37.50 150.00
2012-05-11 16:30 180.00 110.00 33.00 38.00 39.00 190.00
*/
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
今天终于看见一个100分的帖了
如今赚点分真不容易啊

自己去看吧

肯定行
我一直用这个
http://blog.csdn.net/anzhiqiang_touzi/article/details/5702881
[/Quote]不错啊。有没用在后台处理的啊,似乎不让在数据库中处理啊
anzhiqiang_touzi 2012-05-11
  • 打赏
  • 举报
回复
今天终于看见一个100分的帖了
如今赚点分真不容易啊

自己去看吧

肯定行
我一直用这个
http://blog.csdn.net/anzhiqiang_touzi/article/details/5702881
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
如果要在程序里做,先用sql选出一个datatable dt1:
collecttime
2012/5/11 13:19
2012/5/11 16:30
然后:
1、构造一个新的datatable dt2,有收缩压上,舒张压下,血糖餐前,血糖餐后,体温,心率这些列
2、foreach dt1,dt2.NewRow(),你原来那个datatable.select(),填充数据
[/Quote]
能不能写下啊,不是太明白
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 9 楼 的回复:

继续等待求解中。。。。。


其实写个函数 或者存储过程 是可以直接解决你的问题的
如果你硬要通过后台来去执行 上十万条数据 那服务器够呛
你这只是改变数据结构 又不是执行 或者操作数据
[/Quote]
没办法啊,可能最后那些检查项还会变,所以他们就这么设计表的
jun471537173 2012-05-11
  • 打赏
  • 举报
回复
如果要在程序里做,先用sql选出一个datatable dt1:
collecttime
2012/5/11 13:19
2012/5/11 16:30
然后:
1、构造一个新的datatable dt2,有收缩压上,舒张压下,血糖餐前,血糖餐后,体温,心率这些列
2、foreach dt1,dt2.NewRow(),你原来那个datatable.select(),填充数据
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
每行数据都有这些列:收缩压上,舒张压下,血糖餐前,血糖餐后,体温,心率 ,且这些列的采集时间都是同一分钟内?
[/Quote]
就是这样的。一行的采集时间是相同的
Mirror然 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

继续等待求解中。。。。。
[/Quote]

其实写个函数 或者存储过程 是可以直接解决你的问题的
如果你硬要通过后台来去执行 上十万条数据 那服务器够呛
你这只是改变数据结构 又不是执行 或者操作数据
jun471537173 2012-05-11
  • 打赏
  • 举报
回复
select f('收缩压上',to_char(collecttime,'yyyy-mm-dd hh24:mi'))...,to_char(collecttime,'yyyy-mm-dd hh24:mi') from table group by to_char(collecttime,'yyyy-mm-dd hh24:mi')
其中f是根据采集类型和时间获取数据的函数
jun471537173 2012-05-11
  • 打赏
  • 举报
回复
每行数据都有这些列:收缩压上,舒张压下,血糖餐前,血糖餐后,体温,心率 ,且这些列的采集时间都是同一分钟内?
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
继续等待求解中。。。。。
huayy 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
我感觉这种数据不放到操作服务器压力更大。。。
[/Quote]

++
北极小猪 2012-05-11
  • 打赏
  • 举报
回复
我感觉这种数据不放到操作服务器压力更大。。。
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
要求是不能在数据库中做对sql语句进行处理。

这个有点意思 难不成都利用后台来去处理这业务

直接一条SQL语句的事
[/Quote]

谢谢了。我先看下。
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
要求是不能在数据库中做对sql语句进行处理。

这个有点意思 难不成都利用后台来去处理这业务

直接一条SQL语句的事
[/Quote]
如果放到数据库的话,压力很大啊。一天就有几万这种数据
yp19910928 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
可不可以根据已经有的查询结果放入datatable中。。。然后在datatable中组织查询绑定
[/Quote]我也是那么想的,可弄了半个多小时就是没弄出来,悲剧啊。所以在这求解啦
北极小猪 2012-05-11
  • 打赏
  • 举报
回复
可不可以根据已经有的查询结果放入datatable中。。。然后在datatable中组织查询绑定
Mirror然 2012-05-11
  • 打赏
  • 举报
回复
要求是不能在数据库中做对sql语句进行处理。

这个有点意思 难不成都利用后台来去处理这业务

直接一条SQL语句的事
加载更多回复(1)

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧