как добавить строки как столбец в vb.net - PullRequest
0 голосов
/ 22 июля 2011

У меня есть две строки, как показано ниже

regn_no    date         name  Adress
5001       15 may 2010   A      xyz
5001       13 jan 2011   B      ABC
5001       14 july 2011  C      PQR

, поскольку regn_no равно, я хочу добавить строку с большей датой к более низкой.я хочу результат, как показано ниже

regn_no    date       name    Adress  new_name  new_Adress  new_name2  add_2
5001     14 july 2011   A       xyz      B          ABC        C        PQR

пожалуйста, помогите заранее спасибо

1 Ответ

1 голос
/ 23 июля 2011

Это проще сделать в Oracle (вместо VB.net), так как Oracle поставляется со встроенными функциями для этого. Однако есть еще несколько сценариев, о которых вам нужно подумать.

  • Что если у вас было несколько изменений для данного идентификатора? Вы хотите отобразить его в нескольких столбцах, или это скорее «отслеживание изменений», где вы показываете старое и новое значение для каждого изменения?

  • В последней строке (15-й) нового адреса не будет, поэтому он будет нулевым. Если вы не хотите это поднимать, вам нужно добавить еще одно условие (см. Второй запрос ..)

    with t1 as (
    select 5001 regn_no, to_date('15-May-2010','DD-Mon-YYYY') date1,
           'A' name, 'XYZ' Address from dual
    union all
    select 5001 regn_no, to_date('13-May-2010','DD-Mon-YYYY') date1,
           'B' name, 'ABC' address from dual)
    select t1.regn_no, t1.date1, t1.name, t1.address,
           lead(t1.name) over (partition by t1.regn_no
                               order by t1.date1 asc)  new_name,
           lead(t1.Address) over (partition by t1.regn_no
                               order by t1.date1 asc)  new_Address
      from t1
    
  • REGN_NO DATE1 N ADD N NEW

      5001 13-MAY-10 B ABC A XYZ
          5001 15-MAY-10 A XYZ
    

    с t1 как ( выберите 5001 regn_no, to_date ('15-May-2010 ',' DD-Mon-YYYY ') date1, 'A' имя, 'XYZ' Адрес от двойного объединить всех выберите 5001 regn_no, to_date ('13-May-2010 ',' DD-Mon-YYYY ') date1, «B» имя, «ABC» адрес от двойного) выбрать из ( выберите t1.regn_no, t1.date1, t1.name, t1.address, привести (t1.name) к (раздел по t1.regn_no упорядочить по t1.date1 asc) new_name, опережать (t1.Address) (разделить по t1.regn_no упорядочить по t1.date1 asc) new_Address с т1 ) где нет (новое_имя равно нулю, а новое_адрес равно нулю) / REGN_NO DATE1 N ADD N NEW


      5001 13-MAY-10 B ABC A XYZ
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...