2015-02-16 5 views
0

У меня есть Informix код:Сортировка по одному столбцу

select data as DATA from (
(select distinct('Date|Message_Type|Total') as data,0 as sort from dual) 
union 
(select 'dt: '||day||'|'||trim(msg_type)||'|'||nvl(round(total,2),0) as data,1 as sort from weekly_report_1) 
       )order by sort) 

Выход:

data1 
Date|Message_Type|Total 
dt: 02/10/2015|1440|0.00 
dt: 02/10/2015|Total|-26290965.84 
dt: 02/11/2015|1240|-23550538.87 
dt: 02/11/2015|1440|0.00 
dt: 02/11/2015|Total|-23550538.87 
dt: 02/10/2015|1240|-26290965.84 
dt: 02/12/2015|1240|-24181913.23 
dt: 02/14/2015|Total|0.00 
dt: 02/12/2015|1440|0.00 
dt: 02/12/2015|Total|-24181913.23 
dt: 02/13/2015|1240|-24611999.80 
dt: 02/13/2015|1440|0.00 
dt: 02/13/2015|Total|-24611999.80 
dt: 02/14/2015|1240|0.00 
dt: 02/14/2015|1440|0.00 

Когда я пытаюсь сделать следующее:

select * from(
select data as DATA1 from (
(select distinct('Date|Message_Type|Total') as data,0 as sort from dual) 
union 
(select 'dt: '||day||'|'||trim(msg_type)||'|'||nvl(round(total,2),0) as data,1 as sort from weekly_report_1) 
       )order by sort) order by DATA1; 

Я получаю:

Error: General error.Syntax error (State:37000, Native Code: FFFFD4CC)

Мне нужно отсортировать стол.

+0

Выбор 1 как 'sort', а затем упорядочение по' sort' гарантированно не сортировать. Независимо от ваших данных. –

+0

Не тестировалось, но как быстрая пункция (при условии, что вы хотите отсортировать по дате ... 'select different ('Date | Message_Type | Total') как данные от двойного union (выберите 'dt:' || day | | '|' || trim (msg_type) || '|' || nvl (round (total, 2), 0) как данные из weekly_report_1 по порядку) ' –

+1

На самом деле, попробовав это в базе данных Oracle, проблема Возможно, вы не можете указать порядок в подзапросе в объединении. Однако [это] (http://stackoverflow.com/questions/213851/sql-query-using-order-by-in-union) статья имеет рабочий раунд ... 'select different ('Date | Message_Type | Total') в качестве данных из двойного union выберите * from (выберите 'dt:' || day || '|' || trim (msg_type) || '|' || nvl (round (total, 2), 0) как данные из weekly_report_1 по порядку); ' –

ответ

2

У вас может быть только одно предложение ORDER BY. Вам не нужен второй уровень подзапроса.

SELECT data AS Data1 
    FROM (SELECT DISTINCT('Date|Message_Type|Total') AS Data, 
       0 AS Sort 
      FROM dual 
     UNION 
     SELECT 'dt: '||day||'|'||trim(msg_type)||'|'||nvl(round(total,2),0) AS Data, 
       1 AS Sort 
      FROM weekly_report_1 
     ) AS AnyName 
ORDER BY Sort, Data1; 

Если у вас есть серьезно архаичные (много лет нуждается в замене) версии Informix, вы можете сортировать колонкой, которые не перечислены в списке выбора. Если у вас есть достаточно архаичная версия Informix, что это не сработает, вам также нужно будет выбрать значение Sort. Или вы можете положиться на Date, предшествующий dt, в коде, который вы используете, и просто опустить заказ на Sort.

+0

добавил один пакетный скрипт для добавления заголовка, что упрощает d все вопросы .. –

Смежные вопросы