【问题标题】:COUNT AND SUM WITH INNER JOIN使用 INNER JOIN 进行计数和求和
【发布时间】:2019-04-30 16:22:17
【问题描述】:

我有两个表链接到 4 个字段 DP_STOP 有这 4 个字段加上一个客户 ID DP_ORDER 有这 4 个字段加上订单 客户 (LOCATION_ID) 在 DP_STOP 表中作为停靠点位于 4 条路线上 对于这 4 条路线,客户总共有 7 份订单 当我在对订单求和时尝试计算客户数量时,计数是订单数量而不是停止数量

DP_STOP 表

REGION | ROUTE_ID | ROUTE_DATE | INTERNAL_STOP | LOCATION_ID

11600-A| 202      | 2018-11-01 | 9             | 00001
11600-A| 202      | 2018-11-08 | 9             | 00001
11600-A| 202      | 2018-11-15 | 9             | 00001
11600-A| 202      | 2018-11-22 | 9             | 00001

DP_ORDER 表

REGION | ROUTE_ID | ROUTE_DATE | INTERNAL_STOP | ORDER_NUMBER | PLANNED_SIZE1

11600-A| 202      | 2018-11-01   9             | 1A           | 5
11600-A| 202      | 2018-11-08   9             | 2B           | 5
11600-A| 202      | 2018-11-08   9             | 2C           | 5
11600-A| 202      | 2018-11-15   9             | 3A           | 5
11600-A| 202      | 2018-11-15   9             | 3B           | 5
11600-A| 202      | 2018-11-22   9             | 4A           | 5
11600-A| 202      | 2018-11-22   9             | 4B           | 5

当我在订单的 SUM 时尝试 COUNT 停止数时,COUNT 正在计算订单数而不是使用以下查询的停止数:

SELECT  
COUNT (L.LOCATION_ID) AS DELIVERIES,
L.LOCATION_ID AS CUSTOMER_ID,
SUM (O.PLANNED_SIZE1) AS CASES
    FROM TSDBA.DP_STOP L
       INNER JOIN TSDBA.DP_ORDER O
       ON (O.REGION_ID=L.REGION_ID) 
       AND (O.ROUTE_DATE=L.ROUTE_DATE) 
       AND (O.ROUTE_ID=L.ROUTE_ID)
       AND (O.INTERNAL_STOP_ID=L.INTERNAL_STOP_ID)
  WHERE L.ROUTE_DATE BETWEEN '2018-11-01' AND '2018-11-28' 
  AND L.REGION_ID='11600-A'
    GROUP BY L.LOCATION_ID

我的查询结果是:

DELIVERIES | CUSTOMER_ID | PLANNED_SIZE1
7          | 00001       | 35

我希望它是:

DELIVERIES | CUSTOMER_ID | PLANNED_SIZE1
4          | 00001       | 35

【问题讨论】:

    标签: count sum inner-join


    【解决方案1】:

    您应该通过表达式添加distinct,该表达式唯一地定义了一行,即COUNT (distinct L.ROUTE_DATE)(在您的情况下)。

    【讨论】:

    • 嗨,米哈伊尔,谢谢!我尝试了选择不同的计数。然后选择不同的计数 (distinct l.location_id),然后选择计数 (distinct l.location_id),以及其他变体。然后我只得到一个'1'作为计数返回
    • 抱歉,如果不应该有两行具有相同的 ROUTE_DATE 和位置,您可以使用 COUNT (distinct L.ROUTE_DATE)
    • 另一种选择是在子查询中计算CASES,而不在主查询中加入TSDBA.DP_ORDER O
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2012-08-17
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多