为 Mysql 水平显示的数据创建视图
Creating view for Mysql data presented in horizontal way
抱歉主题不明确,但我不确定如何更好地描述我的情况
我有一个 table 类似于:
我被要求根据一些要求创建一个基于 table 的视图,结果应该是这样的:
(我硬编码这个 table 以显示我对视图的预期结果)
我对创建视图函数还很陌生,我试图在网上寻找解决方案,但我找不到太多有用的信息。
创建视图的语法非常简单:
create view <view name> as
<select query here>;
您提出的问题是 return 恰好有五列的视图。您可以使用聚合查询来处理此问题:
create view v_name as
select device_id,
sum(case when device_type = 'A' then count else 0 end) as a,
sum(case when device_type = 'B' then count else 0 end) as b,
sum(case when device_type = 'C' then count else 0 end) as c,
sum(case when device_type = 'D' then count else 0 end) as d
from t -- your table name here
group by device_id;
需要注意的是,这个 return 正是 SELECT
中的类型——如果它们在 table 中,则没有其他类型。如果您需要灵活的列,那么您就有问题了。在任何给定时间构建对 return 值的动态查询并不难。但是,您不能将动态 SQL 放入视图中。如果这是您需要的东西,那么可能需要一些替代机制——例如 JSON。
抱歉主题不明确,但我不确定如何更好地描述我的情况
我有一个 table 类似于:
我被要求根据一些要求创建一个基于 table 的视图,结果应该是这样的:
(我硬编码这个 table 以显示我对视图的预期结果)
我对创建视图函数还很陌生,我试图在网上寻找解决方案,但我找不到太多有用的信息。
创建视图的语法非常简单:
create view <view name> as
<select query here>;
您提出的问题是 return 恰好有五列的视图。您可以使用聚合查询来处理此问题:
create view v_name as
select device_id,
sum(case when device_type = 'A' then count else 0 end) as a,
sum(case when device_type = 'B' then count else 0 end) as b,
sum(case when device_type = 'C' then count else 0 end) as c,
sum(case when device_type = 'D' then count else 0 end) as d
from t -- your table name here
group by device_id;
需要注意的是,这个 return 正是 SELECT
中的类型——如果它们在 table 中,则没有其他类型。如果您需要灵活的列,那么您就有问题了。在任何给定时间构建对 return 值的动态查询并不难。但是,您不能将动态 SQL 放入视图中。如果这是您需要的东西,那么可能需要一些替代机制——例如 JSON。