`
y806839048
  • 浏览: 1127389 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用case when 查询不同角色不同的内容

    博客分类:
  • sql
sql 
阅读更多

 

使用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  &gt;= #{prassignTime,jdbcType=VARCHAR}

      </if>

      <if test="lsassignTime != null and lsassignTime != ''" >

        and o.ASSIGN_TIME &lt;= #{lsassignTime,jdbcType=VARCHAR}

      </if>

      <if test="prfirstdailTime != null  and prfirstdailTime != ''" >

        and o.FIRSTDAIL_TIME  &gt;= #{prfirstdailTime,jdbcType=VARCHAR}

      </if>

      <if test="lsfirstdailTime != nul and lsfirstdailTime != ''" >

        and o.FIRSTDAIL_TIME  &lt;= #{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  &gt;= #{prlastdailTime,jdbcType=VARCHAR}

      </if>

 

      <if test="lslastdailTime != null and lslastdailTime != ''" >

        and o.LASTDAIL_TIME &gt;= #{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`等子句,可以...

    ORACLE常识

    例如,`CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '未知' END`将根据性别字段返回不同的结果。CASE表达式有两种形式:简单CASE表达式和搜索CASE表达式,两者都可以根据不同的条件返回不同的值。 以上是...

    XX计算机四级数据库工程师笔试应用模拟题.doc

    【3】 要统计有购置记录的顾客人数,可以使用COUNT函数,结合DISTINCT关键字以确保每个不同的顾客号只被计数一次。补全的语句如下: SELECT COUNT(DISTINCT 顾客号) FROM 购置表 【4】 在VB 6.0中,Adodc数据控件...

    MES文档,功能业务

    1. **** 和 ****:这两段查询语句的结构非常相似,主要区别在于 `CASE WHEN` 子句中判断的 `STATE_ID` 值不同。这些查询语句都用于获取特定日期(`@DATE`)内各个生产团队(`TEAM_ID`)的生产信息,包括零件号(`PART_NO`...

    EDA考试题目+答案.doc

    1. 应该使用CASE语句的完整形式,每个WHEN后面的值应与WHEN关键字对齐,且最后一行的`'Z'`后面应该没有`2`。 改正后的代码: ``` PROCESS…… BEGIN WITH s SELECT yout &lt;= '0' WHEN "00", '1' WHEN "01", '...

    EDA使用教程答案

    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...

    plsql--编程进阶

    - 使用`WHEN`子句捕获并处理异常。 #### 九、综合案例 **9.1 实例说明** - 通过一个实际的案例,综合运用前面所学的各种概念和技术,编写一个完整的PL/SQL程序。 **9.2 案例步骤** - 分析需求 - 设计解决方案 -...

    mysql sql.doc

    - **查询重构**:复杂的`CASE`语句可能导致性能下降,可能需要寻找更简单的逻辑或使用其他SQL构造来替代。 - **数据类型优化**:确保字段的数据类型是最适合的,比如日期和时间字段应使用日期和时间类型而非字符串...

    基于VHDL语言38译码器.pdf

    在文档的描述部分,有关3到8译码器的VHDL代码被提供,并且使用了WHEN-ELSE和CASE-WHEN两种结构来实现译码器的功能。译码器是一种将数字输入信号转换为多路输出信号的逻辑电路,通常用于地址解码和数据路由。一个3到8...

    oracle从入门到精通.pdf

    - **条件表达式**:如DECODE(), CASE WHEN THEN ELSE END等,用于实现更复杂的逻辑判断。 **1.8 使用函数产生的总计** - **聚合函数**:如COUNT(), SUM(), AVG()等,用于统计分析。 **1.9 子查询** - **子查询...

    MyBatis动态SQL是一项强大的特性,它允许我们在编写SQL语句时根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的

    - **应用场景**:根据用户角色的不同,选择不同的查询条件。 3. ****:用于去除SQL语句中的前导、尾随空白字符或特定字符(如逗号)。 - **语法示例**: ```xml (" suffix=")" prefixOverrides=","&gt; ... ``...

    数据库的学习与使用技巧

    SELECT CASE WHEN salary &gt; 5000 THEN 1 ELSE 0 END AS is_high_salary FROM employees; ``` **6.2 空值的理解** - **概念:** 空值(NULL)在Oracle中表示未知或未定义的值。 - **意义:** NULL通常用来表示缺失...

    JSTL帮助文档 JSTL.in.Action.pdf

    - **内容管理**:使用控制不同用户角色查看的内容。 - **搜索功能**:使用遍历搜索结果。 #### 十三、案例研究 - **电子商务网站**:使用JSTL实现商品列表展示、购物车管理和订单处理等功能。 - **博客系统**:使用...

    Oracle数据库实验报告

    - **实现思路**:筛选出经理角色,然后使用`GROUP BY`和`MIN`函数计算最低薪金。 - **SQL语句**示例: ```sql SELECT d.department_name, MIN(e.salary) AS min_manager_salary FROM departments d JOIN ...

    oracle常用的sql语句

    根据条件返回不同的值,例如:`SELECT CASE WHEN column_name &gt; 0 THEN 'Positive' ELSE 'Negative' END FROM table_name;`。 ##### 10.11 decode 类似于CASE语句,但更简洁,例如:`SELECT DECODE(column_name, '...

    jsp页面java标签库

    流程控制标签如、、&lt;c:when&gt;和,使得开发者可以执行条件判断和选择操作,与Java中的if-else和switch-case类似。这些标签使JSP页面的逻辑更加清晰,并有助于减少Java代码的编写。 异常处理在JSP中也是必不可少的。...

    oracle入门经典

    ### Oracle入门经典知识点详解 #### 一、SQL基础 **1.1 基本概念** - **数据库**: 存储和组织数据的一种方式,...这些内容为Oracle的学习者提供了全面且深入的理解,有助于快速掌握Oracle的基本使用方法和技术要点。

    oracle平时作业二[参照].pdf

    Oracle数据库是一种广泛使用的关系型数据库管理系统,其在软件开发中扮演着重要角色。在Oracle中,对象主要包括表、...这些内容涵盖了查询、游标使用、存储过程和触发器的创建,是理解和掌握Oracle数据库开发的关键点。

Global site tag (gtag.js) - Google Analytics