zoukankan      html  css  js  c++  java
  • 销售——合同——提成

    一、表

    注:数据库:MYsql;tbl_ConList表中的cConNumber列的类型已改为date类型,否则无法与指定日期比较,如:A.cConDate<='2006-12-31'

    二、查询

    1.得到所有销售人员对应合同信息和提成金额

    SQL:

    select A.cConNumber,B.cSaleName,SUM(C.payMoney)
    from tbl_ConList A
    inner join tbl_Sale B inner join tbl_PayMoney C  where A.cSaleID=B.cID and  A.cConID=C.cConID
    group by A.cConNumber,B.cSaleName

    结果:

    2.得到合同日期在“2006-12-31”之前,每个销售人员的合同总额和提成总额:

    SQL:

    select A.cConNumber,B.cSaleName,SUM(C.payMoney)
    from tbl_ConList A
    inner join tbl_Sale B inner join tbl_PayMoney C  where A.cSaleID=B.cID and  A.cConID=C.cConID
    and A.cConDate<='2006-12-31'
    group by A.cConNumber,B.cSaleName

    结果:

    3.得到没有签过合同的销售人员信息:

    SQL:

    SELECT B.cSaleName
    FROM tbl_ConList A
    right JOIN tbl_Sale B ON (A.cSaleID=B.cID)
    where A.cSaleID is null

    或者

    SQL:

    SELECT A.cSaleName
    FROM tbl_Sale  A
    left JOIN tbl_ConList B ON (A.cID=B.cSaleID)
    where B.cSaleID is null

    省略ON后的()也可以:

    SQL:

    SELECT A.cSaleName
    FROM tbl_Sale  A
    left JOIN tbl_ConList B on A.cID=B.cSaleID
    where B.cSaleID is null

    结果:

    注意:使用左外连接(left join)或右外连接(right join),联结字段的条件为on,不能用where,如:

    SQL:

    SELECT A.cSaleName
    FROM tbl_Sale  A
    left JOIN tbl_ConList B where A.cID=B.cSaleID
    and B.cSaleID is null

    这样在语法上是错误的,应把where改为on.

    但是如果是inner join 就没有这个限制,如:

    SQL:

    SELECT A.cSaleName
    FROM tbl_Sale  A
    inner JOIN tbl_ConList B on A.cID=B.cSaleID

    SQL:

    SELECT A.cSaleName
    FROM tbl_Sale  A
    inner JOIN tbl_ConList B where A.cID=B.cSaleID

    都可以查出结果。

    4.得到某年每位销售人员每季度签订的合同数量:

    SQL:

    select t.cSaleName,count(a.cConID) from tbl_Sale t INNER JOIN
    (select A.cID,A.cSaleName,B.cConID from tbl_Sale A inner join tbl_ConList B on(A.cID=B.cSaleID)
    where (Year(B.cConDate)=2006 and Month(B.cConDate)=1)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=2)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=3))a on (t.cID=a.cID)
    group by t.cSaleName

    结果:

    改变条件 (4,5,6) (7,8,9) (10,11,12)

    上面的SQL可以简化,即直接从查询结果a中查询(无需查询表tbl_Sale再INNER JOIN 结果表a,同时去掉了结果表a中的A.cID

    SQL:

    select a.cSaleName,count(a.cConID) from 
    (select A.cSaleName,B.cConID from tbl_Sale A inner join tbl_ConList B on(A.cID=B.cSaleID)
    where (Year(B.cConDate)=2006 and Month(B.cConDate)=1)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=2)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=3))a
    group by a.cSaleName

    还可以简化,去掉嵌套

    SQL:

    select A.cSaleName,count(B.cConID) from tbl_Sale A inner join tbl_ConList B on(A.cID=B.cSaleID)
    where (Year(B.cConDate)=2006 and Month(B.cConDate)=1)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=2)
    OR (Year(B.cConDate)=2006 and Month(B.cConDate)=3)
    group by A.cSaleName

     注意:聚合函数与group by的配合使用,以上SQL的运行逻辑是先对cSaleName进行分组,然后对重复行进行统计。

    小结:不管是左外连接、右外连接还是内连接,联结条件均使用on,以免弄错。

  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/wql025/p/4942595.html
Copyright © 2011-2022 走看看