SQL case语句不适用于多参数pentaho cde

时间:2018-10-10 14:07:57

标签: sql oracle pentaho pentaho-cde

我有一个问题:我有一个带有简单选择器的表,该选择器按用户过滤了该表。目前,我希望选择器为多个,以便由多个用户过滤数据。默认情况下,我将用户“ Todos”(全部用英语表示)放置在用户“ Todos”的情况下,我选择表格中的列以选择所有用户。否则,我将选择所选的用户。

SELECT DISTINCT 
    p.pname AS project, 
    SUM(w.timeworked / 3600) OVER () AS sum_all_hours, 
    SUM(w.timeworked / 3600) OVER (PARTITION BY p.pname) AS suma_proyecto 
FROM            
    jira.jiraissue j, 
    jira.worklog w, 
    jira.project p 
WHERE
    w.issueid = j.id 
    AND j.project = p.id 
    AND w.author IN (${Autor})
    AND p.pname IN ('Area Económica', 
                    'Proyectos Clinicos', 
                    'Proyectos. Con sus componentes', 
                    'Despliege y Soporte') 
    AND TO_CHAR(w.startdate,'yyyy-mm-dd') >= ${FromDate} 
    AND TO_CHAR(w.startdate,'yyyy-mm-dd') <= ${ToDate}

此代码可以正常工作,但省略了用户“ Todos”。

如果我输入以下代码,则该用户使用的是“待办事项”,并且如果我选择了一个用户,但选择了多个用户则没有任何显示。

SELECT DISTINCT p.pname                                              AS project, 
                Sum(w.timeworked / 3600) OVER ()                     AS sum_all_hours, 
                Sum(w.timeworked / 3600) OVER (partition BY p.pname) AS suma_proyecto 
FROM            jira.jiraissue j, 
                jira.worklog w, 
                jira.project p 
WHERE           w.issueid=j.id 
AND             j.project=p.id 

 AND            w.author in(
                CASE 
                                WHEN ${Autor} = ' Todos' THEN author 
                                else ${Autor}

                END) 


AND             p.pname IN ('Area Económica', 
                            'Proyectos Clinicos', 
                            'Proyectos. Con sus componentes', 
                            'Despliege y Soporte') 
AND             to_char(w.startdate,'yyyy-mm-dd') >=${FromDate} 
AND             to_char(w.startdate,'yyyy-mm-dd') <=${ToDate}

1 个答案:

答案 0 :(得分:0)

由于我没有pentaho CDE,所以我不确定为什么您的case表达式不起作用-看起来不错。我认为这可能与pentaho处理参数的方式有关。我建议以其他方式编写您的逻辑,例如:

AND (w.author in (${Autor})
     OR ${Autor} = ' Todos')

如果问题仅是pentaho扩展多值参数的方式,则可能会有所帮助。但是,如果问题在于,它不希望在查询中多次拥有一个命名参数,那会比较棘手,我不知道。