【发布时间】:2022-11-04 16:06:14
【问题描述】:
我正在 Jaspersoft Studio 中创建报告,并希望根据用户提供的参数对输出进行排序。为此,我在 ORDER BY 子句中使用了 CASE WHEN。但是,查询编辑器在第一个 CASE 关键字上抛出错误 - “在输入 'case' 处没有可行的替代方案”。我的 SQL 知识有限,所以大部分内容对我来说都是新的。我在其他示例中对这个 CASE 进行了建模,但我无法弄清楚为什么这个编辑器会抛出错误。
select "RV_PROTOCOL_BASIC"."PROTOCOL_NO" as protocol_no,
"RV_PROTOCOL_BASIC"."PI_NAMES" as principal_investigator,
"RV_PROTOCOL_BASIC"."STATUS" as current_status,
"RV_PROTOCOL_BASIC"."SPONSOR" as sponsor,
CAST("RV_PROTOCOL_BASIC"."IRB_EXPIRATION" as DATE) as expiration_date,
"RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA" as expiration_na
from "RV_PROTOCOL_BASIC"
join "RV_PROTOCOL_DETAILS"
on "RV_PROTOCOL_BASIC"."PROTOCOL_NO" = "RV_PROTOCOL_DETAILS"."PROTOCOL_NO"
where (
"RV_PROTOCOL_BASIC"."STATUS" = 'OPEN TO ACCRUAL'
OR "RV_PROTOCOL_BASIC"."STATUS" = 'CLOSED TO ACCRUAL'
OR "RV_PROTOCOL_BASIC"."STATUS" = 'SUSPENDED'
)
AND (
"RV_PROTOCOL_BASIC"."IRB_EXPIRATION" is null
or "RV_PROTOCOL_BASIC"."IRB_EXPIRATION" < $P{currentDate}
or "RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA" = 'Y'
)
AND $X{IN, "RV_PROTOCOL_BASIC"."PI_NAMES", selectedPI}
AND $X{IN, "RV_PROTOCOL_BASIC"."SPONSOR", selectedSponsor}
AND $X{IN, "RV_PROTOCOL_DETAILS"."DT4_REPORT_TYPE", dt4Type}
order by
case
when $P!{sortBy} = 'Protocol no.' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."PROTOCOL_NO"
when $P!{sortBy} = 'Pis' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."PI_NAMES"
when $P!{sortBy} = 'Current status' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."STATUS"
when $P!{sortBy} = 'Sponsor' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."SPONSOR"
when $P!{sortBy} = 'Expiration date' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA"
when $P!{sortBy} = 'Expiration n/a?' and $P!{sortOrder} = 'Ascending' then "RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA"
end ASC
case
when $P!{sortBy} = 'Protocol no.' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."PROTOCOL_NO"
when $P!{sortBy} = 'Pis' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."PI_NAMES"
when $P!{sortBy} = 'Current status' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."STATUS"
when $P!{sortBy} = 'Sponsor' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."SPONSOR"
when $P!{sortBy} = 'Expiration date' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA"
when $P!{sortBy} = 'Expiration n/a?' and $P!{sortOrder} = 'Descending' then "RV_PROTOCOL_BASIC"."IRB_EXPIRATION_NA"
end DESC
【问题讨论】:
标签: sql case sql-order-by jaspersoft-studio