我正在尝试将列转换为行,如下面的示例。
_________________________________ 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或在加速器中执行(原因7)。SQLCODE=-4742,SQLSTATE=560D5,DRIVER=4.19.56
有没有人能解答这个问题?谢谢
2条答案
按热度按时间falq053o1#
加速器的SQLcode 4772 reason 7表示“查询使用多种编码方案”。
请检查此页面https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/codes/src/tpc/n4742.html。它建议:
如果需要有关无法在加速器中执行语句的原因的详细信息,请发出EXPLAIN语句并检查表DSN_QUERYINFO_TABLE的输出。
其他信息在此page上,其中建议
确保查询引用的所有对象都具有相同的编码方案。
与您的DBA交谈,发现查询中涉及的对象的CCSID,并相应地修改查询,例如使用相同编码的临时表。
n6lpvg4x2#
这表示您的基表。
还有这个,你这个专栏作家更简单,不使用联合或sysdummy1