用法
用法一
case 列 ------------类似于which
when 值 then 值 -------------类似于case
when 值 then 值
else 值 ------------类似于default
end
用法二
case
when 判断条件 then 值
when 判断条件 then 值
else 值
end
case when then else end 使用实例
示例一
SELECT
case -------------如果
when sex='1' then '男' -------------sex='1',则返回值'男'
when sex='2' then '女' -------------sex='2',则返回值'女'
else 0 -------------其他的返回'其他’
end -------------结束
from sys_user --------整体理解: 在sys_user表中如果sex='1',则返回值'男'如果sex='2',则返回值'女' 否则返回'其他’
我们对筛选的列进行处理
实例二 行转列
SELECT oi.order_code AS '订单号',oi.created_time AS '创建时间',oi.real_total_price AS '订单支付金额',
MAX(CASE ooc.type WHEN 0 THEN IFNULL(ooc.commodity_name,'') ELSE 0 END) AS '普通商品名称',
MAX(CASE ooc.type WHEN 0 THEN IFNULL(ooc.commodity_sale_price,0) ELSE 0 END) AS '普通商品价格',
MAX(CASE ooc.type WHEN 1 THEN IFNULL(ooc.commodity_name,'') ELSE '' END) AS '耗材费名称',
MAX(CASE ooc.type WHEN 1 THEN IFNULL(ooc.commodity_sale_price,0) ELSE 0 END) AS '耗材费金额',
MAX(CASE ooc.type WHEN 2 THEN IFNULL(ooc.commodity_sale_price,0) ELSE 0 END) AS '夜班费金额',
MAX(CASE ooc.type WHEN 3 THEN IFNULL(ooc.commodity_sale_price,0) ELSE 0 END) AS '辛苦费金额'
FROM oasis_order.ordernv_info oi LEFT JOIN oasis_order.order_commodity ooc ON oi.id = ooc.order_id
WHERE oi.source = 2 AND oi.user_order_status = 30 AND oi.created_time > '2019-09-10 00:00:00' AND oi.created_time < '2019-11-30 23:59:59'
GROUP BY oi.id;
行专列参考:https://blog.csdn.net/qq_38616723/article/details/83622239