2013-05-28 4 views
0

Есть ли какой-либо простой способ имитации функциональности GROUP_CONCAT в Ingres 9.2?Как GROUP_CONCAT в Ingres?

У меня есть таблица, которая имеет что-то вроде:

OrderID LineNumber LineText 
1   1    This is an example note which is trunc 
1   2    ated at a certain point. 
2   1    Another note which is just one line. 

И так далее. Некоторые ноты - 1 строка, другие - 50+.

Я хочу, чтобы запрос, чтобы вернуться:

OrderID FullText 
1  This is an example note which truncated at a certain point. 
2  Another note which is just one line. 

В MySQL или SQLite я использовать GROUP_CONCAT. В MS SQL это сложнее, но я бы использовал функциональность FOR XML для достижения решения. Я не знаю, как это сделать в Энгре. Я начал писать хранимую процедуру, которая могла бы возвращать конкатенированные заметки для одного идентификатора заказа, но я не мог видеть простой способ интегрировать это в мои запросы.

Любые идеи?

ответ

1

Это может работать:

select OrderId, 
     (max(case when LineNumber = 1 then LineText else '' end) + 
     max(case when LineNumber = 2 then LineText else '' end) + 
     max(case when LineNumber = 3 then LineText else '' end) 
     ) as LineText 
from t 
group by Orderid; 

Это очень удобно, что у вас есть LineNumber.

+0

Спасибо, я попробую это и отчитаю. Моя единственная забота заключается в том, что я не уверен, есть ли верхний предел того, сколько строк может иметь записка. Если это 999, тогда код может оказаться немного подробным. – dantefs

+0

@ dantefs. , , Я с тобой согласен. Однако альтернатива будет использовать курсор, и это может быть еще менее привлекательным. –

+0

Это было решение, с которым я пошел. Некоторые заметки - 2000 строк, что явно не сработает, но справляется с подавляющим большинством наших записей. Еще раз спасибо. – dantefs

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