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

Posted

技术标签:

【中文标题】SQL case 语句不适用于多参数 pentaho cde【英文标题】:SQL case statement doesn't work with multiple parameter pentaho cde 【发布时间】:2018-10-10 14:07:56 【问题描述】:

我有一个问题:我有一个带有简单选择器的表格,可以按用户过滤表格。此时我希望选择器为多个,以便按多个用户过滤数据。默认情况下,我输入用户“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

【问题讨论】:

很难看出问题所在,但我注意到“待办事项”以空格开头。您是否有机会修剪搜索参数或其他内容? 我放了空格,我想显示列表中的第一个选项。 Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 年前),不鼓励使用它 这是一个 CASE 表达式而不是陈述。 【参考方案1】:

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

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

如果问题只是 pentaho 扩展多值参数的方式,这可能会有所帮助。但如果问题是它不喜欢在查询中多次使用命名参数......那就更棘手了,我不知道。

【讨论】:

以上是关于SQL case 语句不适用于多参数 pentaho cde的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询中的“CASE”不适用于字符串值

用于舍入的SQL嵌套case语句

SQL - 如果存在不适用于 Select 语句?

SQL 语句不适用于 Oracle JDBC

SQL - 左连接不适用于 switch 语句

用于从多个表中增加多个 case 函数的 SQL 语句