CAST CASE 语句超出限制

CAST CASE statement exceeding limit

我想建立一个报告,让我在 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 在操作 "open result" 期间发生一般异常。 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 在操作 "open result" 期间发生一般异常。 ORA-25137: 数据值超出范围

首先:这是一个交叉表。你可能想多了。

第二:了解你的数据。

看起来[发帖说明]包含的值长达6747个字符。根据错误信息,可能是 textntext。 varchar(20) 不够长。尝试将其转换为未指定长度的字符似乎会导致不同的问题。假设这是 MS SQL 服务器,这样的事情可能会有所帮助:

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