sql语句连接查询的问题

问题描述

我现在有两张表,一张target目标表,一张费用表,目标表一个用户每个月就一条记录,比如设定的各个要完成的目标,费用表可能一个月有好几条记录,记录已完成的数据,表之间的关联用用户的ID,现在遇到问题,想在一个列表中展示目标数据和已完成数据,目标表有目标月份日期字段,费用表有生效日期字段目标月份 目标标保 已完成标保 目标佣金 已完成佣金 目标件数 已完成件数2012-11 1000 500 200000 2000 500 50我现在sql语句如下 select SALES_CODE,target.TARGET_MONTH as targetMonth,target.STD_PREM as stdPrem,target.BROKERAGE as brokerage,target.CASES as cases,d.toStdPrem as totStdPrem,d.toBrokerage as totBrokerage,d.toCases as totCasesfrom AB_TARGET target inner join (select sum(com.STANDARD_PAYMENT) as toStdPrem, sum(com.FINAL_PAY_AMOUNT) as toBrokerage, count(com.id) as toCases,com.SALE_ID,SOURCE from COMMISSION_INFO com <where> <if test="@Ognl@isNotEmpty(targetMonthBegin)"> <![CDATA[ com.EFFECTIVE_DATE >= #{targetMonthBegin}]]> </if> <if test="@Ognl@isNotEmpty(targetMonthEnd)"><![CDATA[ and com.EFFECTIVE_DATE <= #{targetMonthEnd}]]> </if> </where> group by com.sale_id, com.source)d on target.SALES_CODE = d.SALE_ID <if test="@Ognl@isNotEmpty(salesCode)">AND target.SALES_CODE = #{salesCode} and d.source='1801'</if> <where> <if test="@Ognl@isNotEmpty(targetMonthBegin)"><![CDATA[ target.TARGET_MONTH >= #{targetMonthBegin}]]> </if> <if test="@Ognl@isNotEmpty(targetMonthEnd)"><![CDATA[ and target.TARGET_MONTH <= #{targetMonthEnd}]]> </if> <if test="@Ognl@isNotEmpty(salesName)">AND target.SALES_CODE =#{salesName} </if><if test="@Ognl@isNotEmpty(sortColumns)">ORDER BY ${sortColumns}</if></where>查询出的数据不正确,比如目标表11月份和12月份有两条数据,而费用表仅11月份有数据,结果按照上面语句查询出来11月份和12月份的费用已完成的情况是一样的,正确的费用表12月份查出来相应已完成的记录应该为空,求解答

解决方案

怀疑这个联表条件(on target.SALES_CODE = d.SALE_ID)的正确性? 有日期条件的时候查询结果才是对的,很有可能是日期条件+target.SALES_CODE = d.SALE_ID这个才能真正定位目标表对应的费用明细;
解决方案二:
比如目标表11月份和12月份有两条数据,而费用表仅11月份有数据,结果按照上面语句查询出来11月份和12月份的费用已完成的情况是一样的,正确的费用表12月份查出来相应已完成的记录应该为空,求解答很明显你的需求是外连 不是 内连即目标和费用直接是外链关系 如用left join
解决方案三:
TARGET_MONTH >targetMonthBeginTARGET_MONTH <targetMonthEnd你的费用表种的生效日期字段 是不是11月份的 生效日期 肯定是>=11.1 <==11.30如果是这样就应该没得问题 或者你打印下执行的sql语句放到查询分析器 看看

时间: 2024-09-10 10:01:52

sql语句连接查询的问题的相关文章

jdbc 动态sql语句拼接 查询不出结果

问题描述 jdbc 动态sql语句拼接 查询不出结果 public List queryByCondition(String command String description) { // message列表 List messageList = new ArrayList(); try { // 加载驱动 Class.forName(""com.mysql.jdbc.Driver""); // 数据库的连接 Connection conn; conn = Dri

sql 查询指定日期时间记录sql语句与查询实例

sql 查询指定日期时间记录sql语句与查询实例  首先创建一个表abc结构如下    CREATE TABLE `cc`.`loup` (  `id` INT( 4 ) NOT NULL AUTO_INCREMENT ,  `datetimes` INT( 4 ) NULL ,  `ipaddress` VARCHAR( 20 ) NULL ,  PRIMARY KEY ( `id` )  ) ENGINE = MYISAM    再批量插入数据    INSERT INTO `loup` (

oracl数据库sql语句怎么查询工资最低的两名员工编号,姓名,工资等信息。

问题描述 oracl数据库sql语句怎么查询工资最低的两名员工编号,姓名,工资等信息. 查询每个部门工资最低的两个员工编号,姓名,工资,等信息.关键是工资最低的两名员工 解决方案 SELECT * FROM ( SELECT bumen, price, ROW_NUMBER () OVER ( PARTITION BY bumen ORDER BY bumen, price DESC ) rn FROM table1 WHERE bumen IN ( SELECT bumen FROM tabl

在java类中写带中文的sql语句,查询结果为空

问题描述 在java类中写带中文的sql语句,查询结果为空 String query="select * from Restaurant where Restaurant_name='紅樹林';"; rs=stm.executeQuery(query); 这是我在封装好的数据库类中写的sql语句,查询结果为空(rs.next() 为false ) 如果改用id查询,即: String query="select * from Restaurant where Restaura

sql语句怎么查询数据库最新两天的数据

问题描述 sql语句怎么查询数据库最新两天的数据 我不知道我的数据库最新数据是哪天的,我要查询最新两天的所有数据,sql语句改怎么写,怎么写后面的 解决方案 http://blog.csdn.net/hanjingjingpan/article/details/6022014 如果是48小时内 select * from info where DateDiff(hh,datetime,getDate())<48 如果是2天内 SELECT * FROM A where datediff(d,da

Oracle中SQL语句连接字符串的符号使用介绍_oracle

Oracle中SQL语句连接字符串的符号为|| 复制代码 代码如下: select catstr(tcdm) || (',') from T_YWCJ_RWCJR where cjrjh='009846' and rwid='12050' and jsdm='CJY' 拼接成一条数据并连接一个","

如何在 Linux 上用 SQL 语句来查询 Apache 日志

如何在 Linux 上用 SQL 语句来查询 Apache 日志 Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中着重讲解 Apache HTTP web server 生成的 Apache access 日志. 这次,我们会通过另类的途径来分析 Apache access 日志,我们使用的工具是 asql.asql 是一个开源的工具,它能够允许

用标准的SQL语句实现查询记录分页

标准|分页|语句 在绝大多数的应用中,返回大量的符合条件的记录是司空见惯的,最典型的莫过于搜索了.在搜索的应用中,用户给出搜索条件,服务器查出符合条件的记录.但往往搜索会返回大量的数据记录,如果在网页中,往往是通过分页的方式来实现,页面提供诸如上一页,下一页等等按钮来实现分页.现在主要有以下几中方式来实现分页:1.EJB的Find方法2.在显示第一页前将所有的记录放在collection对象中,后续的各页都在内存中取.3.每一页都到数据库作一次重复的查询,然后将符合条件的记录显示出来.4.保存前

sql表连接查询使用方法(sql多表连接查询)_MsSql

实际的项目,存在多张表的关联关系.不可能在一张表里面就能检索出所有数据.如果没有表连接的话,那么我们就需要非常多的操作.比如需要从A表找出限制性的条件来从B表中检索数据.不但需要分多表来操作,而且效率也不高.比如书中的例子: 复制代码 代码如下: SELECT FIdFROM T_CustomerWHERE FName='MIKE' 这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,这样就可以到T_Order中检索FCustomerId等于2 的记录: 复制代码 代码如下: SE