我想构建一个报告,使我的工作描述类型全部排成1行(整齐的格式),而每个职位的标题具有多行。 当前报告给我:
Job Title Description Type Posting Description
Cook Responsibilities Make food
Cook Requirements 3 Years of Experience
所需的输出是:
Job Title Responsibilities Requirements
Cook Make food 3 Years of Experience
我首先尝试了一个基本的CASE语句,该语句使用,但在这里了解到我需要使用CAST。但是,当我这样做时,我会出错。使用我目前拥有的内容,发布说明的完整字符串就通过了。我不确定该如何解决。
奖金:字符串包含HTML文本...如果有人告诉我,那将是很大的帮助。
CAST(
CASE WHEN ([Description Type Number] =3)
THEN [Enterprise Staffing].[Job Opening].[Posting Description]
END
AS VARCHAR(20))
结果错误 RQP-DEF-0177执行操作'sqlOpenResult'status ='-9'时发生错误。 UDA-SQL-0107操作“打开结果”期间发生了一般异常。 ORA-22835:缓冲区太小,无法从CLOB转换为CHAR或从BLOB转换为RAW(实际:6747,最大:4000)
CAST(
CASE WHEN ([Description Type Number] =3)
THEN [Enterprise Staffing].[Job Opening].[Posting Description]
END
AS CHAR)
结果错误 RQP-DEF-0177执行操作'sqlOpenResult'status ='-9'时发生错误。 UDA-SQL-0107操作“打开结果”期间发生了一般异常。 ORA-25137:数据值超出范围
答案 0 :(得分:0)
首先:这是一个交叉表。您可能想得太多。
第二:了解您的数据。
[发布说明]似乎包含长达6747个字符的值。根据错误消息,它可能是 text 或 ntext 。 varchar(20)不够长。尝试将其强制转换为未指定长度的char似乎会引起不同的问题。假设这是MS SQL Server,则可能会有所帮助:
CASE
WHEN ([Description Type Number] =3)
THEN CAST([Enterprise Staffing].[Job Opening].[Posting Description], VARCHAR(8000))
ELSE CAST('', VARCHAR(8000))
END
但是您的错误消息可能表明Oracle数据库。 (ORA-52137
)
CASE
WHEN ([Description Type Number] =3)
THEN CAST((substr([Enterprise Staffing].[Job Opening].[Posting Description], 1, 4000), VARCHAR2(4000))
ELSE CAST('', VARCHAR2(4000))
END
此外,Cognos中的CAST使用逗号,而不是 AS 。