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

Откуда:
Сообщений: 24
Всем доброго дня!!!

Помогите, плиз, решить одну задачу:

есть таблица:
ID Col1 Col2 Col3
1 a1 c1
1 a2 b1
1 c2
2 aa1
2 bb1
2 aa2 bb2 cc1
2 bb3 cc2

как получить результат?


ID Col1 Col2 Col3
1 a1 b1 c1
1 a2 c2
2 aa1 bb1 cc1
2 aa2 bb2 cc2
2 bb3

желательно не с помощью хп...
8 сен 11, 13:56    [11247316]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Решатель задач
Guest
Надир
Всем доброго дня!!!

Помогите, плиз, решить одну задачу:

есть таблица:
ID Col1 Col2 Col3
1 a1 c1
1 a2 b1
1 c2
2 aa1
2 bb1
2 aa2 bb2 cc1
2 bb3 cc2

как получить результат?


ID Col1 Col2 Col3
1 a1 b1 c1
1 a2 c2
2 aa1 bb1 cc1
2 aa2 bb2 cc2
2 bb3

желательно не с помощью хп...

нихера не понятно что и как нужно сделать.
8 сен 11, 13:59    [11247342]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Надир,
1. распарсить строчки в вид: ID, COL

1 a1
1 c1
1 a2
1 b1
...

2. Собрать обратно, анализируя последний символ.

Т.е. UNPIVOT/PIVOT походу вам надобно читать.
8 сен 11, 14:12    [11247486]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Ну или, если пивоты читать лень, то через UNION, а потом MAX(CASE ...)
8 сен 11, 14:12    [11247493]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
Вот нормальный вид таблиц


IDCol1Col2Col3
1b1
1a2b2
1a3c3
1c4
2aa1cc1
2bb2
2aa3cc3


IDCol1Col2Col3
1a2b1c3
1a3b2c4
2aa1bb2cc1
2aa3cc3
8 сен 11, 15:00    [11248025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
чего должно получиться
Guest
а из такой чего должно получиться?
IDCol1Col2Col3
1b1
1a2b2
1a3c3
1c4
1c5
2aa1cc1
2bb2
2aa3cc3
8 сен 11, 15:05    [11248088]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
kDnZP,

содержание колонок для примера, так что вычленить знаки и символы по ним не получится....
8 сен 11, 15:07    [11248124]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
iljy
Member

Откуда:
Сообщений: 8711
Надир
kDnZP,

содержание колонок для примера, так что вычленить знаки и символы по ним не получится....

Тогда объясните, по каким принципам вы разбиваете поля по строкам
8 сен 11, 15:12    [11248188]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
iljy
Member

Откуда:
Сообщений: 8711
Надир,

а заодно скрипты создания таблиц приведите.
8 сен 11, 15:15    [11248226]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
iljy,

Просто чтоб все значение "поползли" вверх в рамках ID
8 сен 11, 15:15    [11248241]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
iljy,

ID nchar() not null
col1 nchar null
col2 nchar null
col3 nchar null

вторая таблица аналогична
8 сен 11, 15:19    [11248287]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Надир,

что определяет порядок строк в исходной таблице?
8 сен 11, 15:31    [11248440]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
iap,

Ситуация в целом такая:

есть список в SharePoint2007 со столбцами: Наименование проекта,раздел проекта, общие проблемы, срочные проблемы, проблемы требующие участия руководства. Я вытащил это все в таблицу. не у каждого проекта есть все проблемы.
Я хочу чтоб получился dataset следующего вида:
наименование проекта;первая не пустая общая проблема, первая не пустая срочная проблема, первая непустая тр.уч.рук. проблема. в следующей строчке наименование того же проекта и вторые не пустые проблемы и т.д.
потом все тоже самое по следующему проекту. и все это вне зависимости от раздела проекта.
А в дальнейшем в отчете я просто сгруппирую это по проектам.
8 сен 11, 15:42    [11248571]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Надир
Вот нормальный вид таблиц


IDCol1Col2Col3
1b1
1a2b2
1a3c3
1c4
2aa1cc1
2bb2
2aa3cc3


IDCol1Col2Col3
1a2b1c3
1a3b2c4
2aa1bb2cc1
2aa3cc3

Честно говоря не вчитывался в смысл сообщения про проекты, но если просто "подтянуть" в рамках одного ИД, то может вот так подойдет, по крайней мере результат совпадает с нужным. Хотя имхо, изврат какой-то и на больших данных будет жесть...
declare @t table (ID int, Col1 varchar(10), Col2  varchar(10), Col3  varchar(10))
insert into @t
select 1,null,'b1',null
union all select 1,'a2','b2',null
union all select 1,'a3',null,'c3'
union all select 1,null,null,'c4'
union all select 2,'aa1',null,'cc1'
union all select 2,null,'bb2',null
union all select 2,'aa3',null,'cc3';

with
c1 as ( select ID, Col1, rn = row_number() over (partition by id order by Col1) from @t where Col1 is not null ),
c2 as ( select ID, Col2, rn = row_number() over (partition by id order by Col2) from @t where Col2 is not null ),
c3 as ( select ID, Col3, rn = row_number() over (partition by id order by Col3) from @t where Col3 is not null )
select 
	ID = coalesce (c1.ID,c2.ID,c3.ID),
	c1.Col1,
	c2.Col2,
	c3.Col3
from 
	c1
	full join c2 on c1.rn = c2.rn and c1.id = c2.id
	full join c3 on c1.rn = c3.rn and c1.id = c3.id
8 сен 11, 15:49    [11248644]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Надир
есть список в SharePoint2007 со столбцами: Наименование проекта,раздел проекта, общие проблемы, срочные проблемы, проблемы требующие участия руководства. Я вытащил это все в таблицу. не у каждого проекта есть все проблемы.

А "вытащить" сразу в нужном виде ?
8 сен 11, 15:51    [11248679]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
SomewhereSomehow, Спасибо!!! Буду пробовать!!!
8 сен 11, 15:54    [11248715]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
Glory,

Это как?
8 сен 11, 15:57    [11248753]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Надир
Glory,

Это как?

Хм. Наверное как всегда запросом к таблицам. Так же, как вы получаете текущий результат
8 сен 11, 16:02    [11248798]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
SomewhereSomehow, подскажите, а если необходимо чтоб и было указаны те ID у которых все столбцы пустые.
8 сен 11, 16:05    [11248840]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
iljy
Member

Откуда:
Сообщений: 8711
Надир,

declare @t table(ID int, Col1 varchar(3), Col2 varchar(3), Col3 varchar(3))
insert @t values
(1,	NULL,	'b1',	NULL),
(1,	'a2',	'b2',	NULL),
(1,	'a3',	NULL,	'c3'),
(1,	NULL,	NULL,	'c4'),
(2,	'aa1',	NULL,	'cc1'),
(2,	NULL,	'bb2',	NULL),
(2,	'aa3',	NULL,	'cc3')

select ID,Col1,Col2,Col3 
from(
	select ID, Val, Name, ROW_NUMBER() over(PARTITION by ID, Name order by Val) RN
	from @t unpivot(Val for Name in (Col1,Col2,Col3)) u
)t 
pivot(max(Val) for Name in (Col1,Col2,Col3)) p
order by ID, RN
8 сен 11, 18:03    [11249927]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
iljy
Надир,

declare @t table(ID int, Col1 varchar(3), Col2 varchar(3), Col3 varchar(3))
insert @t values
(1,	NULL,	'b1',	NULL),
(1,	'a2',	'b2',	NULL),
(1,	'a3',	NULL,	'c3'),
(1,	NULL,	NULL,	'c4'),
(2,	'aa1',	NULL,	'cc1'),
(2,	NULL,	'bb2',	NULL),
(2,	'aa3',	NULL,	'cc3')

select ID,Col1,Col2,Col3 
from(
	select ID, Val, Name, ROW_NUMBER() over(PARTITION by ID, Name order by Val) RN
	from @t unpivot(Val for Name in (Col1,Col2,Col3)) u
)t 
pivot(max(Val) for Name in (Col1,Col2,Col3)) p
order by ID, RN


Красивое решение!
8 сен 11, 19:13    [11250260]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом!!!  [new]
Надир
Member

Откуда:
Сообщений: 24
iljy, спасибо!!!!
12 сен 11, 11:22    [11262702]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить