DB2 SQL列到行

时间:2018-04-25 09:28:47

标签: sql db2 pivot crosstab

我正在尝试将列转换为行,如下例所示。

 _________________________________     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

有人提出任何解决方法吗?感谢

1 个答案:

答案 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,并相应地重新编写查询,例如使用相同编码的临时表。