2015-02-03 2 views
0

Мне интересно, как я хотел бы создать инструкцию SQL select, которая может иметь возможный null в нескольких столбцах. Вот какой может быть один возможный результирующий набор:SQL select statement with column is null иногда

Volume | Ticket | Hours | Rate | Amount 
       1234  10.5  190  1995 
    90      90   100  9000 
       1235  11   190  2090 
    90      90   110  9900 

том связан с вышеуказанным билетом. Итак, первый раз, когда вы показываете билет, мы не хотим показывать том, но мы хотим показать Ticket #. Если есть том, мы хотим, чтобы следующая строка отображала его значения, но не билет.

Стол для стола, который я вытягиваю, равен Charges. Эти столбцы:

ChargeID, TicketNum, ProductID, Hours, Rate, Amount

Где ChargeID это первичный ключ.

Если у кого-то есть какие-либо идеи, они были бы весьма признательны.

+0

@ChaseErsnt, у вас есть первичный ключ этой таблицы? –

+0

Откуда вы знаете, какой объем идет с каким билетом? –

+0

Некоторые продукты могут быть помечены жидкостью внутри стола Products. @tvelykyy обновленный вопрос –

ответ

1

Вы могли бы сделать что-то вроде этого (это в Oracle, хотя ..) Не знаю, почему вы этот вопрос помечено .. УВА

with w_data as ( 
      select 33 volume, 1234 ticket, 10.5 hours, 190 rate, 1995 amount from dual union all 
      select 90 volume, 1234 ticket, 90 hours, 100 rate, 9000 amount from dual union all 
      select 33 volume, 1235 ticket, 11 hours, 190 rate, 2090 amount from dual union all 
      select 90 volume, 1235 ticket, 90 hours, 110 rate, 9900 amount from dual 
     ) 
    Select case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then volume else null end new_volume, 
     case when ticket = lag(ticket) over (partition by ticket order by ticket, volume) then null else ticket end new_ticket, 
      hours, rate, amount 
    from w_data 
    order by ticket, volume 
/

    NEW_VOLUME NEW_TICKET  HOURS  RATE  AMOUNT 
    ---------- ---------- ---------- ---------- ---------- 
        1234  10.5  190  1995 
      90     90  100  9000 
        1235   11  190  2090 
      90     90  110  9900 

    4 rows selected. 
+0

Я попытаюсь преобразовать это в sql и попробовать. –

+0

Работал отлично. Спасибо. –