【问题标题】:How can I group into months a column count?如何将列数分组为几个月?
【发布时间】:2022-09-27 18:44:22
【问题描述】:

这里有一个关于如何打印每个月签署的合同数量的问题。这是我的代码:

SELECT COUNT(A.CONTRACT_NUMBER) AS count

FROM DM_SALES.V_SALES_DM_DATA A
  LEFT JOIN DM_SALES.V_SALES_DM_CONTRACT_BUNDLE VSR ON A.CONTRACT_NUMBER = VSR.CONTRACT_NUMBER 

WHERE 1=1
  AND VSR.NAME_PRODUCER LIKE \'%OPPO%\'
  AND A.CONTRACT_STATE <> \'Cancelled\' 
  AND a.cnt_signed=1 
  AND A.LOAN_TYPE = \'Consumer Loan\'
  AND A.DTIME_SIGNATURE >= \'01-01-2022\'

GROUP BY (A.DTIME_SIGNATURE, \'yyyy-mm\') 
;

但结果是:

我想像这样打印出来

月 |数数

2022-01 | 10000

2022-02 | 12000

谢谢!

  • 将 VSR 条件从 WHERE 移动到 ON 以获得真正的 LEFT JOIN 结果。就像现在一样,您会得到常规的 INNER JOIN 结果。
  • 您有什么实际问题 - 错误或错误结果? DTIME_SIGNATURE 是什么数据类型 - 看起来像日期(或时间戳),那么您的意思是 group by to_char(...) 吗? (虽然group by trunc(..., \'MM\') 可能会更好......)

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

包括进入select 列列表。

此外,您必须修复group by 子句(您缺少to_char 函数)和日期值(我假设dtime_signatureDATE 数据类型;使用日期文字或to_date 具有适当格式模型的函数)。更改在以下代码中指示:

  SELECT TO_CHAR (a.dtime_signature, 'yyyy-mm') AS months,     --> here
         COUNT (a.contract_number) AS COUNT
    FROM dm_sales.v_sales_dm_data a
         LEFT JOIN dm_sales.v_sales_dm_contract_bundle vsr
            ON a.contract_number = vsr.contract_number
   WHERE     1 = 1
         AND vsr.name_producer LIKE '%OPPO%'
         AND a.contract_state <> 'Cancelled'
         AND a.cnt_signed = 1
         AND a.loan_type = 'Consumer Loan'
         AND a.dtime_signature >= DATE '2022-01-01'            --> here
GROUP BY TO_CHAR (a.dtime_signature, 'yyyy-mm');               --> here

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2021-07-13
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多