使用case when 查询不同角色不同的内容
主要针对其他表,不同字段和角色比对,不是同一个字段和角色比对的简单情况
case when 可以放在任何地方
当然也可以用mybatise本身的标签:
<choose>
复杂的sql都可借助网上资料查询结构,思路
<select id="selectByCondition" parameterType="map" resultMap="BaseResultMap">
<include refid="PAGINATION.mysql_paginationStart" />
SELECT
*,
(SELECT TEAM_NAME FROM financial_sales_team t WHERE t.ID = o.TEM_ID) AS TEAM_NAME,
(SELECT EMP_NAME FROM financial_sales_employment t WHERE t.ID = o.EMP_ID) AS EMP_NAME
FROM
financial_sales_order o
<include refid="where_condition" />
<include refid="PAGINATION.mysql_paginationEnd" />
</select>
<sql id="where_condition">
<where>
<if test="userId != null and userId != ''" >
<!-- 不同的角色查看属于自己团队或分配给自己的数据,经理只能查看自己导入的数据,管理员可以查看全部的数据 -->
AND (CASE
WHEN (SELECT ROLE_CODE FROM financial_sales_role WHERE ID = (SELECT ROLE_ID FROM financial_sales_user_role WHERE USER_ID = #{userId})) = 0
THEN o.EMP_ID = (SELECT EMPID FROM financial_sales_user WHERE ID = #{userId})
WHEN (SELECT ROLE_CODE FROM financial_sales_role WHERE ID = (SELECT ROLE_ID FROM financial_sales_user_role WHERE USER_ID = #{userId})) = 1
THEN o.TEM_ID = (SELECT TEMID FROM financial_sales_employment WHERE USER_ID = #{userId})
WHEN (SELECT ROLE_CODE FROM financial_sales_role WHERE ID = (SELECT ROLE_ID FROM financial_sales_user_role WHERE USER_ID = #{userId})) = 2
THEN o.IMPORTER_ID = (SELECT EMPID FROM financial_sales_user WHERE ID = #{userId})
ELSE TRUE
END)
</if>
<if test="batchName != null and batchName != ''" >
AND o.BATCH_NAME like CONCAT('%',#{batchName},'%' )
</if>
<if test="customerId != null and customerId != ''" >
AND o.CUSTOMER_ID=#{customerId}
</if>
<choose>
<when test="empId != null and empId != ''" >
AND o.EMP_ID = #{empId}
</when>
<otherwise>
<if test="temId != null and temId != ''" >
AND o.TEM_ID = #{temId}
</if>
</otherwise>
</choose>
<if test="orderno != null and orderno != ''" >
AND o.ORDERNO like CONCAT('%',#{orderno},'%' )
</if>
<if test="customerName != null and customerName != ''" >
AND o.CUSTOMER_NAME like CONCAT('%',#{customerName},'%' )
</if>
<if test="prassignTime != null and prassignTime != ''" >
and o.ASSIGN_TIME >= #{prassignTime,jdbcType=VARCHAR}
</if>
<if test="lsassignTime != null and lsassignTime != ''" >
and o.ASSIGN_TIME <= #{lsassignTime,jdbcType=VARCHAR}
</if>
<if test="prfirstdailTime != null and prfirstdailTime != ''" >
and o.FIRSTDAIL_TIME >= #{prfirstdailTime,jdbcType=VARCHAR}
</if>
<if test="lsfirstdailTime != nul and lsfirstdailTime != ''" >
and o.FIRSTDAIL_TIME <= #{lsfirstdailTime,jdbcType=VARCHAR}
</if>
<if test="status != null and status != ''" >
AND o.STATUS = #{status}
</if>
<if test="prlastdailTime != null and prlastdailTime != ''" >
and o.LASTDAIL_TIME >= #{prlastdailTime,jdbcType=VARCHAR}
</if>
<if test="lslastdailTime != null and lslastdailTime != ''" >
and o.LASTDAIL_TIME >= #{lslastdailTime,jdbcType=VARCHAR}
</if>
<if test="dialResult != null and dialResult != ''" >
AND o.DIAL_RESULT = #{dialResult}
</if>
<if test="(prdailCount != null and prdailCount != '') and (lsdailCount != null and lsdailCount != '')" >
AND o.DAIL_COUNT BETWEEN #{prdailCount} AND #{lsdailCount}
</if>
<if test="assignStatus != null and assignStatus != ''" >
AND o.ASSIGNSTATUS = #{assignStatus}
</if>
<if test="importerId != null" >
AND o.IMPORTER_ID = #{importerId}
</if>
<if test="orderType != null and orderType != ''" >
AND o.ORDER_TYPE = #{orderType}
</if>
</where>
</sql>
用于分页的sql:
PAGINATION:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="PAGINATION">
<sql id="mysql_paginationStart">
<!-- <if test="offset != null and pageSize != null and isPaging==true">
select * from (
</if>
-->
</sql>
<sql id="mysql_paginationEnd">
<if test="offset != null and pageSize != null and isPaging==true">
<!-- )tmp limit #{offset},#{pageSize} -->
limit #{offset},#{pageSize}
</if>
</sql>
</mapper>
相关推荐
可以调整SQL查询以根据用户角色返回不同的信息,例如,使用`IF`或`CASE WHEN`语句在查询中加入条件判断。 6. **数据分析**:通过`JOIN`、`LEFT JOIN`、`RIGHT JOIN`等联接操作,结合`WHERE`、`HAVING`等子句,可以...
例如,`CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '未知' END`将根据性别字段返回不同的结果。CASE表达式有两种形式:简单CASE表达式和搜索CASE表达式,两者都可以根据不同的条件返回不同的值。 以上是...
【3】 要统计有购置记录的顾客人数,可以使用COUNT函数,结合DISTINCT关键字以确保每个不同的顾客号只被计数一次。补全的语句如下: SELECT COUNT(DISTINCT 顾客号) FROM 购置表 【4】 在VB 6.0中,Adodc数据控件...
1. **** 和 ****:这两段查询语句的结构非常相似,主要区别在于 `CASE WHEN` 子句中判断的 `STATE_ID` 值不同。这些查询语句都用于获取特定日期(`@DATE`)内各个生产团队(`TEAM_ID`)的生产信息,包括零件号(`PART_NO`...
1. 应该使用CASE语句的完整形式,每个WHEN后面的值应与WHEN关键字对齐,且最后一行的`'Z'`后面应该没有`2`。 改正后的代码: ``` PROCESS…… BEGIN WITH s SELECT yout <= '0' WHEN "00", '1' WHEN "01", '...
2. **使用CASE语句实现** ```vhdl ARCHITECTURE case_mux41 OF mux41 IS SIGNAL s0s1 : STD_LOGIC_VECTOR(1 DOWNTO 0); -- 定义标准逻辑位矢量数据类型 BEGIN s0s1 ; -- s1相并s0,即s1与s0并置操作 PROCESS (s0...
- 使用`WHEN`子句捕获并处理异常。 #### 九、综合案例 **9.1 实例说明** - 通过一个实际的案例,综合运用前面所学的各种概念和技术,编写一个完整的PL/SQL程序。 **9.2 案例步骤** - 分析需求 - 设计解决方案 -...
- **查询重构**:复杂的`CASE`语句可能导致性能下降,可能需要寻找更简单的逻辑或使用其他SQL构造来替代。 - **数据类型优化**:确保字段的数据类型是最适合的,比如日期和时间字段应使用日期和时间类型而非字符串...
在文档的描述部分,有关3到8译码器的VHDL代码被提供,并且使用了WHEN-ELSE和CASE-WHEN两种结构来实现译码器的功能。译码器是一种将数字输入信号转换为多路输出信号的逻辑电路,通常用于地址解码和数据路由。一个3到8...
- **条件表达式**:如DECODE(), CASE WHEN THEN ELSE END等,用于实现更复杂的逻辑判断。 **1.8 使用函数产生的总计** - **聚合函数**:如COUNT(), SUM(), AVG()等,用于统计分析。 **1.9 子查询** - **子查询...
- **应用场景**:根据用户角色的不同,选择不同的查询条件。 3. ****:用于去除SQL语句中的前导、尾随空白字符或特定字符(如逗号)。 - **语法示例**: ```xml (" suffix=")" prefixOverrides=","> ... ``...
SELECT CASE WHEN salary > 5000 THEN 1 ELSE 0 END AS is_high_salary FROM employees; ``` **6.2 空值的理解** - **概念:** 空值(NULL)在Oracle中表示未知或未定义的值。 - **意义:** NULL通常用来表示缺失...
- **内容管理**:使用控制不同用户角色查看的内容。 - **搜索功能**:使用遍历搜索结果。 #### 十三、案例研究 - **电子商务网站**:使用JSTL实现商品列表展示、购物车管理和订单处理等功能。 - **博客系统**:使用...
- **实现思路**:筛选出经理角色,然后使用`GROUP BY`和`MIN`函数计算最低薪金。 - **SQL语句**示例: ```sql SELECT d.department_name, MIN(e.salary) AS min_manager_salary FROM departments d JOIN ...
根据条件返回不同的值,例如:`SELECT CASE WHEN column_name > 0 THEN 'Positive' ELSE 'Negative' END FROM table_name;`。 ##### 10.11 decode 类似于CASE语句,但更简洁,例如:`SELECT DECODE(column_name, '...
流程控制标签如、、<c:when>和,使得开发者可以执行条件判断和选择操作,与Java中的if-else和switch-case类似。这些标签使JSP页面的逻辑更加清晰,并有助于减少Java代码的编写。 异常处理在JSP中也是必不可少的。...
### Oracle入门经典知识点详解 #### 一、SQL基础 **1.1 基本概念** - **数据库**: 存储和组织数据的一种方式,...这些内容为Oracle的学习者提供了全面且深入的理解,有助于快速掌握Oracle的基本使用方法和技术要点。
Oracle数据库是一种广泛使用的关系型数据库管理系统,其在软件开发中扮演着重要角色。在Oracle中,对象主要包括表、...这些内容涵盖了查询、游标使用、存储过程和触发器的创建,是理解和掌握Oracle数据库开发的关键点。