2016-12-14 2 views
-1

Ниже приводится сценарий:Как не писать SQL-запрос, чтобы создать группу не для каждой сгруппированных записи

У меня есть данные в следующем формате:

entryid ,   ac_no, db/cr,  amt 
    ----------------------------------------------- 
    1     10  D  5 
    1     11  C  5   
    2     01  D  8        
    2     11  C  8   
    3     12  D  10   
    3     13  C  10   
    4     14  D  5   
    4     16  C  5   
    5     14  D  2   
    5     17  C  2   
    6     14  D  3   
    6     18  C  3   

Я хочу данные в следующем формате:

До сих пор я получил первые 3 столбца по запросу

select wm_concat(entryid),ac_no,db_cr,Sum(amt) from t1 group by ac_no,db_cr 

    wm_Concat(entryid),ac_no, db/cr, Sum(amt), set_id 
    ------------------------------------------------ 
    1     10 D  5   S1 
    2     01 D  8   S1 
    1,2     11 C  13   S1 
    3     12 D  10   S2 
    3     13 C  10   S2 
    4,5,6    14 D  10   S3 
    4     16 C  5   S3 
    5     17 C  2   S3 
    6     18 C  3   S3 


I want an additional column `set_id` that either shows this S1, S2.. or any number 1,2.. so that the debit & credit entries sets can be identified. 

Я делаю наборы дебетовых и кредитные записи на основе их значений Ac_no. Любая небольшая помощь будет высоко оценена. Спасибо

+0

Я не понимаю мотив здесь. Каков первичный ключ здесь и почему вы хотите сгруппировать их? – Ubercool

+0

Мотив @Pramod, показывая результат пользователю в gui вместе с флажками, если пользователь хочет отменить выбор дебетовой записи, тогда соответствующая сумма может быть вычтена из суммированной записи кредита этого набора. нет первичного ключа, потому что результат является результатом запроса, однако мы можем использовать row_number .. для нумерации записей. – Ratnesh

+0

Я не думаю, что эти результаты имеют смысл с учетом запроса - почему у вас есть две строки для ac_no = 0000 и db/cr = D? Неужели вы должны получить только один? То же самое для (1256, D). Кроме того, почему вы используете wm_concat, который является недокументированной и неподдерживаемой функцией. Если вы на 11 г или выше, вы должны использовать LISTAGG – Boneist

ответ

0

Создайте новый столбец, скажем set и укажите уникальный идентификатор для определенного набора. Так, например, первые три записи будут иметь идентификатор S1, следующие два будут иметь S2 и т. Д.

Чтобы отличить transaction от set, вы можете использовать столбец db/cr вместе с недавно добавленной колонкой set. Вы можете определить, что 3-я строка - это набор, поскольку тип транзакции - «C», тогда как транзакции имеют тип «D».

Здесь я предположил, что ваши транзакции являются дебетовыми, если не просьба предоставить более подробную информацию в вопросе. Надеюсь это поможет.