表结构如下:
登录名 权限 权限id 用户名
admin 系统首页 1 孟灵
admin 采购进货 2 孟灵
admin 销售出货 3 孟灵
admin 查看库存 4 孟灵
admin 客户管理 5 孟灵
qy 系统首页 1 钱宇
qy 查看库存 4 钱宇
qy 供货商管理 6 钱宇
行专列语句:
select 登录名,用户名
max(case when 权限='采购进货' then 1 else 0 end) 采购进货,
max(case when 权限='销售出货' then 1 else 0 end) 销售出货,
max(case when 权限='查看库存' then 1 else 0 end) 查看库存,
max(case when 权限='客户管理' then 1 else 0 end) 客户管理,
max(case when 权限='供货商管理' then 1 else 0 end) 供货商管理,
max(case when 权限='销售统计' then 1 else 0 end) 销售统计,
max(case when 权限='退换货管理' then 1 else 0 end) 退换货管理,
max(case when 权限='商品分类管理' then 1 else 0 end) 商品分类管理,
max(case when 权限='员工管理' then 1 else 0 end) 员工管理
from v_qux group by 登录名,用户名
转完之后:
admin 孟灵 1 1 1 1 0 0 0 0 0
qy 钱宇 0 0 1 0 1 0 0 0 0
case when (列明)='值' then 1 else 0 end 的意思: 差不多和if语句差不多, 如果列明等于值 就返回真 就执行 then 后面的, 如果列明不等于值 就返回假 就执行 else 后面的 在至于end 就是格式问题
重点:切忌 这是按行来比较的
首先如表:查询出第一行(admin 系统首页 1 孟灵)然后拿出第一行权限的那列(系统首页)和 max(case when 权限='采购进货' then 1 else 0 end)采购进货,
max(case when 权限='销售出货' then 1 else 0 end) 销售出货,
max(case when 权限='查看库存' then 1 else 0 end)查看库存,
max(case when 权限='客户管理' then 1 else 0 end) 客户管理,
max(case when 权限='供货商管理' then 1 else 0 end)供货商管理,
max(case when 权限='销售统计' then 1 else 0 end) 销售统计, max(case when 权限='退换货管理' then 1 else 0 end) 退换货管理, max(case when 权限='商品分类管理' then 1 else 0 end) 商品分类管理,
max(case when 权限='员工管理' then 1 else 0 end) 员工管理
这些按个比较(比较什么:比较第一行(也就是上面如表所示的权限那列)) 咱们把所有的有可能的都列出来, 如果有符合的就让他下面的那列值是“1” 如果没有符合的就让他下面那列值是“0”,比较晚之后 在比较 第二列以此类推