Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с запросом  [new]
nea
Member

Откуда:
Сообщений: 30
помогите пож. советом, есть таблица с данными:

ID KOL1 KOL2
1 NULL Gratis frukt/grønt;
2 spm1_1
3 NULL Vanndispenser
4 spm1_2
5 NULL Sponset helsestudio
6 spm1_3
7 spm1_noter Annet Noter :
8 spm1_4
9 NULL Ingen

а нужно получить:
ID KOL1 KOL2
1 spm1_1 Gratis frukt/grønt;
2 spm1_2 Vanndispenser
3 spm1_3 Sponset helsestudio
4 spm1_noter Annet Noter :
5 spm1_4 Ingen

Можно ли сделать такое запросом и обойтись без курcора,цикла?
29 май 09, 12:29    [7243651]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
H2O2
Guest
На таком наборе данных следующим образом.
Если версия сервера < 2005, то нумеровать придётся другим способом.
declare @t table(ID int, KOL1 varchar(32) null, KOL2 varchar(32))
insert @t
select
1, NULL, 'Gratis frukt/grønt;'
union all select
2, 'spm1_1', null 
union all select
3, NULL, 'Vanndispenser'
union all select
4, 'spm1_2', null 
union all select
5, NULL, 'Sponset helsestudio '
union all select
6, 'spm1_3', null
union all select
7, 'spm1_noter', 'Annet Noter :'
union all select
8, 'spm1_4', null 
union all select
9, NULL, 'Ingen'

select
  row_number() over(order by q.id) as id,
  q.f1 as kol1, 
  q.f2 as kol2
from 
(select
  t1.id,
  t1.kol1 as f1,
  case
    when t1.kol1 is not null and t1.kol2 is not null then t1.kol2
    when t1.kol2 is null and t3.kol1 is null then t3.kol2
    when t1.kol2 is null and t3.kol1 is not null then t2.kol2
  end as f2
from
  @t t1 
  join @t t2 on t2.id = t1.id + 1
  join @t t3 on t3.id = t1.id - 1) as q
where
  q.f1 is not null and q.f2 is not null
-----------------------------------
id	kol1	kol2
1	spm1_1	Gratis frukt/gront;
2	spm1_2	Vanndispenser
3	spm1_3	Sponset helsestudio 
4	spm1_noter	Annet Noter :
5	spm1_4	Ingen

(5 row(s) affected)
29 май 09, 16:29    [7245592]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
nea
Member

Откуда:
Сообщений: 30
Oгромное Вам спасибо!!!
29 май 09, 16:44    [7245702]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iljy
Guest
nea,
можно проще
select isnull(t1.r_num, t2.r_num) ID, KOL1, KOL2
from
	(select ROW_NUMBER() over(order by ID) r_num, KOL1
	 from @t where KOL1 is not null
	 ) t1
		full join
	(select ROW_NUMBER() over(order by ID) r_num, KOL2
	 from @t where KOL2 is not null
	 ) t2
		on t1.r_num = t2.r_num

скрипты по созданию и заполнению - как у H2O2
29 май 09, 17:00    [7245824]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iljy
Guest
nea,

кстати!
если для скрипта H2O2 добавить еще одну строку в таблицу, т.е. в колонках разное количество ненулевых значений - работает некорректно!

insert 
......
union all select
10, NULL, 'Ingen2'

результат не меняется - результирующих строк по прежнему 5. вам нужно так? или чтоб непарные значения тоже выдавались?
29 май 09, 17:08    [7245869]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить