我正在尝试将列转换为行,如下例所示。
_________________________________ ROW | Columns | values_
|Column1 | Column2 | Column3 _____________________________
_________________________________ 1 | 1 | 12
Row 1| 12 | 25 | 11 1 | 2 | 25
Row 2| 30 | 5 | 15 --> 1 | 3 | 11
2 | 1 | 30
2 | 2 | 5
2 | 3 | 15
为了解决这个问题,我使用了以下语句
with t as (
<my query which builds the cross tab>
)
select t.Row,
(case when n.n = 1 then Column1
when n.n = 2 then Column2
when n.n = 3 then Column3
end) as values_
from t cross join
(select 1 as n from sysibm.sysdummy1 union all
select 2 from sysibm.sysdummy1 union all
select 3 from sysibm.sysdummy1
) n;
但我收到以下错误
陈述不能由DB2或ACCEREROROR执行(原因 7)。 SQLCODE = -4742,SQLSTATE = 560D5,DRIVER = 4.19.56
有人提出任何解决方法吗?感谢
答案 0 :(得分:0)
SQLcode 4772来自加速器的原因7意味着“查询使用多种编码方案”。
查看此页面https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/codes/src/tpc/n4742.html。它建议:
“如果您需要更多有关该声明无法解释的信息 在加速器中执行,发出EXPLAIN语句并检查 表DSN_QUERYINFO_TABLE的输出。“
有关此page建议的其他信息
确保查询引用的所有对象具有相同的对象 编码方案。
与您的DBA交谈,发现查询中涉及的对象的CCSID,并相应地重新编写查询,例如使用相同编码的临时表。