Столбцы DB2 SQL в строки

Я пытаюсь преобразовать столбцы в строки, как в примере ниже.

 _________________________________     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; 

но я получил следующую ошибку

THE STATEMENT CANNOT BE EXECUTED BY DB2 OR IN THE ACCELERATOR (REASON 7). SQLCODE=-4742, SQLSTATE=560D5, DRIVER=4.19.56

Есть ли у кого-нибудь подсказки, чтобы решить эту проблему? Благодарность

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
1 183
1

Ответы 1

SQLcode 4772 причина 7 от ускорителя означает «В запросе используется несколько схем кодирования.».

Проверьте эту страницу https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/codes/src/tpc/n4742.html. Он советует:

"If you need more information about why the statement cannot be executed in the accelerator, issue the EXPLAIN statement and examine the output of the table DSN_QUERYINFO_TABLE."

Дополнительная информация содержится в этом страница, который советует

Ensure that all objects to which the query refers have the same encoding scheme.

Поговорите со своим администратором баз данных, узнайте CCSID объектов, участвующих в вашем запросе, и соответствующим образом переработайте запрос, например, с временными таблицами, использующими ту же кодировку.

Я предполагаю, что sysibm.sysdummy1 - это не тот же CCSID, что и ваши пользовательские таблицы. Возможно, создайте свою собственную таблицу с нужными вам значениями. Например. CREATE TABLE N(N INT NOT NULL PRIMARY KEY); INSERT INTO N VALUES 1; INSERT INTO N VALUES 2; и т. д.

Paul Vernon 25.04.2018 11:54
select * from table(values(1)) union all select * from table(values(2)) union all select * from table(values(3)) заменит ссылки sysibm.sysdummy1.
Rob Wilson 25.04.2018 13:52

Другие вопросы по теме