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 ANSIJOIN
语法-92 SQL 标准(25 年前),不鼓励使用它
这是一个 CASE 表达式而不是陈述。
【参考方案1】:
由于我没有 pentaho CDE,我不确定为什么您的 case 表达式不起作用 - 它看起来不错。我认为这可能与 pentaho 处理参数的方式有关。我建议以不同的方式编写您的逻辑,例如:
AND (w.author in ($Autor)
OR $Autor = ' Todos')
如果问题只是 pentaho 扩展多值参数的方式,这可能会有所帮助。但如果问题是它不喜欢在查询中多次使用命名参数......那就更棘手了,我不知道。
【讨论】:
以上是关于SQL case 语句不适用于多参数 pentaho cde的主要内容,如果未能解决你的问题,请参考以下文章