[MCOL-4826] Nested CASE statements dont work - loses column references Created: 2021-07-29  Updated: 2023-07-02

Status: Open
Project: MariaDB ColumnStore
Component/s: None
Affects Version/s: None
Fix Version/s: 23.10

Type: Bug Priority: Major
Reporter: Allen Herrera Assignee: Sergey Zefirov
Resolution: Unresolved Votes: 1
Labels: None


 Description   
  • Reproduction Steps

create database ttlmaxqa3_ecash_dw1;
use ttlmaxqa3_ecash_dw1;
CREATE TABLE `tmp_tb_ldh_gpawnv3` (
`id` int(10) unsigned DEFAULT NULL,
`effective_due_date` date DEFAULT NULL,
`loan_model_id` int(10) unsigned DEFAULT NULL,
`status_id` int(10) unsigned DEFAULT NULL,
`bus_date_created` date DEFAULT NULL,
`group_id` int(10) DEFAULT NULL
) ENGINE=Columnstore DEFAULT CHARSET=utf8

insert into tmp_tb_ldh_gpawnv3 values
(26964124,'2014-03-19',10,6,'2014-02-17',NULL),(26964125,'2014-03-19',13,6,'2014-02-17',NULL),(26964126,'2014-03-19',42,6,'2014-02-17',NULL),(26964129,'2014-04-28',42,6,'2014-02-27',NULL),(26964133,'2014-04-16',42,6,'2014-03-17',NULL),(26964135,'2014-04-26',42,6,'2014-03-27',NULL),(26964160,'2014-06-29',42,6,'2014-05-30',NULL),(26964176,'2014-08-08',42,6,'2014-07-09',NULL),(26964419,'2015-03-09',42,6,'2015-02-07',NULL),(26965407,'2015-12-12',42,3,'2015-11-12',NULL),(26966910,'2017-03-26',42,6,'2017-02-24',NULL)

  • Fails

ERROR 1815 (HY000): Internal error: 'days_late' cannot be found in tuple.

select status_id,
IFNULL((
     CASE WHEN status_id = 13 AND SUM(IFNULL(status_id,0)) > 0  THEN
              
        CASE WHEN IFNULL(IF(days_late<0,0,days_late),0) THEN
            ABS(ABS(ROUND(SUM(IFNULL(id,0)),4)) - SUM(loan_model_id))
        ELSE
            0
        END
    END 
 
),0) AS accrued_bal
from 
 (
 select id,status_id, loan_model_id, DATEDIFF(@asOfDate,tmp_tb_ldh_gpawnv3.effective_due_date) AS days_late from tmp_tb_ldh_gpawnv3 limit 5
 ) a group by status_id

  • Works

select status_id,
IFNULL((
    CASE WHEN status_id = 13 AND SUM(IFNULL(status_id,0)) > 0 AND IFNULL(IF(days_late<0,0,days_late),0)  THEN
        ABS(ABS(ROUND(SUM(IFNULL(id,0)),4)) - SUM(loan_model_id))
    ELSE
         0
    END 
),0) AS accrued_bal
from 
 (
 select id,status_id, loan_model_id, DATEDIFF(@asOfDate,tmp_tb_ldh_gpawnv3.effective_due_date) AS days_late from tmp_tb_ldh_gpawnv3 limit 5
 ) a group by status_id;

Note: The work around is to flatten the case logic to a single teir as seen in the working example


Generated at Thu Feb 08 02:53:18 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.