数据库的设计问题,如何把数据横向显示

draculamx 2017-12-20 04:43:34
有一张表,记录了所有项目的名称,和他们的ID号:

id itemname itemid
0 温度 0
1 湿度 1
2 风速 2

另一张表,记录了每个项目的数值:

id value itemid rectime
0 10 0 2017-12-19 08:00:00
1 80 1 2017-12-19 08:00:00
2 12 2 2017-12-19 08:00:00

现在要显示报表,报表格式如下:
编号 温度 湿度 风速 记录时间

请问显示报表的时候,要怎么查询啊,因为在记录数值和时间的表里面,数据都是“竖着的”。。。。

所有数据,每个小时记录一次,之所以这么设计数据库,是因为,“温度,湿度,风速”这些记录的数值,以后可能会添加或者修改或者删除。

我也知道设计一张表最简单:

id 风速 温度 湿度 记录时间
0 10 12 80 2017-12-19 08:00:00

有这样一张表,最简单,但是如果以后遇到数据的增加或者减少,这个表就没用了,但是如果使用我开头的设计,报表就很难查询。。。

...全文
953 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2018-01-15
  • 打赏
  • 举报
回复
Delphi区有人的问题好像跟你类似: 数据库里的字段以及字段的内容怎么竖着显示到DBGridEh里?http://bbs.csdn.net/topics/392308584 关于数据行转列的字段赋值问题!http://bbs.csdn.net/topics/392302245
draculamx 2018-01-15
  • 打赏
  • 举报
回复
罢了罢了,就搞一张表,以后要改再说吧。。。
  • 打赏
  • 举报
回复
数据库里的字段以及字段的内容怎么竖着显示,我记得有一个开源组件叫DBVGrid
  • 打赏
  • 举报
回复
引用 5 楼 draculamx 的回复:
罢了罢了,就搞一张表,以后要改再说吧。。。
用视图是可以解决的,我测试了一下,假定你的第二张表(记录了每个项目的数值)名TDATA,建立4个视图(只需要建立一次): CREATE VIEW V1 (ID, TEMPERATURE, RECTIME) AS select ID, VALUE, RECTIME from TDATA where ITEMID = 0; CREATE VIEW V2 (ID, HUMIDITY, RECTIME) AS select ID, VALUE, RECTIME from TDATA where ITEMID = 1; CREATE VIEW V3 (ID, AIRVELOCITY, RECTIME) AS select ID, VALUE, RECTIME from TDATA where ITEMID = 2; CREATE VIEW V4 (ID, TEMPERATURE, HUMIDITY, AIRVELOCITY, RECTIME) AS select a.ID, a.TEMPERATURE, b.HUMIDITY, c.AIRVELOCITY, a.RECTIME from v1 a, v2 b, v3 c where a.rectime = b.rectime and a.rectime = c.rectime; V4就是你需要的格式,可以像一般表一样使用(只读,修改数据要在实际表中修改)。
  • 打赏
  • 举报
回复
可以用视图(view)来解决,view就是逻辑table,view的数据不占用存储空间,是从某些table、view中select出来的。 create view... 建立3个视图,分别把温度、湿度、风速选出来,每个都要包括id、rectime,然后根据rectime把三个视图合并成一个视图。也许可以直接建立一个视图即可,不过我感觉那个SQL不好写。
draculamx 2017-12-20
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
id value itemid rectime 0 10 0 2017-12-19 08:00:00 1 80 1 2017-12-19 08:00:00 2 12 2 2017-12-19 08:00:00 这个不就是数据库的连接查询吗? id和itemid 代表什么,这张表更多几行的数据是什么?
你看第一张表,itemid就代表了“温度,湿度,风速”。。。
draculamx 2017-12-20
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
id value itemid rectime 0 10 0 2017-12-19 08:00:00 1 80 1 2017-12-19 08:00:00 2 12 2 2017-12-19 08:00:00 这个不就是数据库的连接查询吗? id和itemid 代表什么,这张表更多几行的数据是什么?
更多的行就是每个整点记录的这3个数据的数值啊 id value itemid rectime 0 10 0 2017-12-19 08:00:00 1 80 1 2017-12-19 08:00:00 2 12 2 2017-12-19 08:00:00 3 34 0 2017-12-19 09:00:00 4 24 1 2017-12-19 09:00:00 5 35 2 2017-12-19 09:00:00 每个整点,把这3个数据的数值记录一次,下一次就是10点了 我知道连接查询,但是现在我如果要用FastReport输出报表: ID 温度 湿度 风速 记录时间 0 10 80 12 2017-12-19 08:00:00 1 34 24 35 2017-12-19 09:00:00 要输出这样的结果,要怎么查询呢??
ooolinux 2017-12-20
  • 打赏
  • 举报
回复
id value itemid rectime 0 10 0 2017-12-19 08:00:00 1 80 1 2017-12-19 08:00:00 2 12 2 2017-12-19 08:00:00 这个不就是数据库的连接查询吗? id和itemid 代表什么,这张表更多几行的数据是什么?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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