SQL 行转列 详细分析

 

表结构如下:
登录名 权限  权限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”,比较晚之后  在比较 第二列以此类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值